java - 如何修复需要权限 CALENDAR_READ 或 CALENDAR_WRITE?
问题描述
代码显示
引起:java.lang.SecurityException: Permission Denial: 从 ProcessRecord{ad38a2a 30100:com.example.myapplication/u0a231} (pid=30100, uid=10231) 打开提供程序 com.android.providers.calendar.CalendarProvider2 需要 android.permission .READ_CALENDAR 或 android.permission.WRITE_CALENDAR
这是时间线日历视图,它以线性视图显示日历并进行缩放
清单.xml
<uses-permission android:name="android.permission.READ_CALENDAR"/>
<uses-permission android:name="android.permission.WRITE_CALENDAR"/>
MainActivity.java
calstuff.LoadCalendars();
Log.d(LogTag, "calendars loaded: " + calstuff.ourCalendars.size());
calstuff.LoadEvents();
Log.d(LogTag, "events loaded: " + calstuff.ourEvents.size());
CalStuff.java
Cursor calCursor = context.getContentResolver().query(uri,
projection, Calendars.VISIBLE + " = 1",
null, Calendars._ID + " ASC");
我希望显示线性日历时间线,日历可以按年-月-周-天缩放,但它显示错误。
解决方案
您需要运行时权限,如下所示:
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) !=
PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this,
Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
} else if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.READ_CALENDAR) == PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this,
Manifest.permission.WRITE_CALENDAR) == PackageManager.PERMISSION_GRANTED) {
ContentResolver contentResolver = getContentResolver();
ContentValues contentValues = new ContentValues();
Uri uri = contentResolver.insert(CalendarContract.Events.CONTENT_URI, contentValues);
}
我从以下链接复制:
有关更多信息,请阅读以下链接:
https://developer.android.com/training/permissions/requesting
推荐阅读
- ruby-on-rails - Timecop 不适用于黄瓜水豚
- reactjs - (0, _reactReduxFirebase.reactReduxFirebase) 不是函数
- python - Geopandas 世界和国家地图库
- apache-spark - 在 Spark 中创建分布式 RDD
- angular - 在另一个中注入组件是否正确
- c++ - c++ 字符串类定义的字符串文字是否属于 const char[] 类型
- javascript - NVC dxDataGrid 按钮列导致编译器错误
- mysql - /usr/share/cmake-3.5/Modules/TestBigEndian.cmake:51(消息)处的 CMake 错误:找不到合适的类型
- python - Colorama 在 cmd 中使用 python 失败
- excel - 创建一个 ADODB 对象