Fabric Crashlytics моего приложения продолжает появляться отказ в разрешении SercurityException READ_CONTACTS, когда я пытаюсь запросить контактную информацию из ContentProvider. Странная вещь заключается в том, что журналы показывают, что все эти вещи происходили на андроиде ниже, чем Marshmallow (в частности, 5.1.1), как с рутом, так и без рута, что не имеет никакого смысла, так как разрешение времени выполнения требуется только на андроиде с 6.0 и выше .
Я никогда не смогу воспроизвести проблему. Получите как тысячи журналов на ткани, и я никогда не получу настоящих журналов на всех своих устройствах, как бы я ни старался.
Операции выполняются в экземпляре Worker, который является производным от RxWorker платформы WorkerManager. Начните с функции createWork следующим образом
override fun createWork(): Single<Result> {
if (!isContactPermissionGranted()) {
return Single.just(Result.failure())
}
return Observable.create {
it.onNext(contactFetcher.fetchAll())
it.onComplete()
}
.flatMap { // Do something with the data }
.map { Result.success() }
.onErrorReturn { Result.failure() }
}
Вот функция fetchAll в contactFetcher
public ArrayList<Contact> fetchAll() throws Exception {
String[] projectionFields = new String[]{
...
};
...
Cursor c = null;
try {
c = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, projectionFields, null, null, ContactsContract.Contacts.DISPLAY_NAME);
if (c != null && c.moveToFirst()) {
// Do something with the return cursor...
}
} finally {
if (c != null) {
c.close();
}
}
...
}
Это журнал сбоев:
Non-fatal Exception: java.lang.SecurityException
Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{3bd623d1 11061:vn.com/u0a175} (pid=11061, uid=10175) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
И да, я поставил <uses-permission android:name="android.permission.READ_CONTACTS" />
в своем манифесте