Требуется android.permission.READ_CALENDAR или android.permission.WRITE_CALENDAR - PullRequest
0 голосов
/ 03 октября 2018

Я дал разрешения READ_CALENDAR и WRITE_CALENDAR в своем манифесте и в своем установленном приложении, я дал разрешение на запуск Календаря и подтвердил то же самое в настройках приложения.

Но хотя на некоторых устройствах яm Требуется android.permission.READ_CALENDAR или android.permission.WRITE_CALENDAR Ошибка!Это безумие!Вот мой logcat:

Fatal Exception: java.lang.RuntimeException: An error occurred while executing doInBackground()
       at android.os.AsyncTask$3.done(AsyncTask.java:353)
       at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
       at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
       at java.util.concurrent.FutureTask.run(FutureTask.java:271)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
       at java.lang.Thread.run(Thread.java:764)

Caused by java.lang.SecurityException: Permission Denial: opening provider com.android.providers.calendar.CalendarProvider2 from ProcessRecord{76fdbc0 21351:com.app.byday/u0a166} (pid=21351, uid=10166) requires android.permission.READ_CALENDAR or android.permission.WRITE_CALENDAR
       at android.os.Parcel.readException(Parcel.java:1943)
       at android.os.Parcel.readException(Parcel.java:1889)
       at android.app.IActivityManager$Stub$Proxy.getContentProvider(IActivityManager.java:4885)
       at android.app.ActivityThread.acquireProvider(ActivityThread.java:6019)
       at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2525)
       at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1791)
       at android.content.ContentResolver.query(ContentResolver.java:749)
       at android.content.ContentResolver.query(ContentResolver.java:715)
       at android.content.CursorLoader.loadInBackground(CursorLoader.java:64)
       at android.content.CursorLoader.loadInBackground(CursorLoader.java:54)
       at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:315)
       at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:69)
       at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:64)
       at android.os.AsyncTask$2.call(AsyncTask.java:333)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
       at java.lang.Thread.run(Thread.java:764)

Дополнительная информация: Я интегрировал приложение календаря Etar-AOSP в свое приложение.

Ответы [ 2 ]

0 голосов
/ 26 июля 2019

Прежде всего, вам нужно добавить разрешения в ваш manifest.xml. Для календаря вам нужно добавить это

<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />

Во время выполнения вам нужно снова запросить разрешение.Таким образом, вы можете создать некоторые функции, чтобы проверить это.Объявите vble для вашего обратного вызова

final int callbackId = 42;

и вызовите вашу функцию для проверки прав доступа

checkPermission(callbackId, Manifest.permission.READ_CALENDAR, Manifest.permission.WRITE_CALENDAR);

И это функция для объявления:

private void checkPermission(int callbackId, String... permissionsId) {
boolean permissions = true;
for (String p : permissionsId) {
    permissions = permissions && ContextCompat.checkSelfPermission(this, p) == PERMISSION_GRANTED;
}

if (!permissions)
    ActivityCompat.requestPermissions(this, permissionsId, callbackId);
} 
0 голосов
/ 03 октября 2018

Для них требуются разрешения времени выполнения, а не только разрешения манифеста в любой современной версии Android.

...