Я реализовал SyncAdapter для выполнения синхронизации элементов в приложении. Этот адаптер корректно вызывается Android, когда синхронизация запрашивается программно или автоматически.
Когда я пытаюсь отменить операцию синхронизации вручную, сняв флажок в разделе «Учетные записи и настройки синхронизации»> {myappccount}> Данные и синхронизация> {app app}, мои адаптеры синхронизации onSyncCanceled также вызываются правильно.
Но когда мое приложение пытается прочитать некоторые внутренние настройки через запрос поставщика контента, оно получает «java.lang.SecurityException: Permission Denial». Хотя один и тот же запрос хорошо работает во время обычного выполнения приложения или во время синхронизации.
Ниже приведена трассировка стека.
java.lang.SecurityException: Permission Denial: reading com.my.applications.sync.content.MySettingProvider uri content://com.my.applications.sync.provider.mysetting/currentstateid from pid=0, uid=1000 requires null
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:307)
at android.content.ContentProvider$Transport.query(ContentProvider.java:186)
at android.content.ContentResolver.query(ContentResolver.java:262)
at com.my.applications.sync.service.MysyncService.getCurrentServiceUri(MysyncService.java:442)
at com.my.applications.sync.service.MysyncService.cancelSync(MysyncService.java:1723)
at com.my.applications.sync.syncadapter.OtherSyncAdapter.onSyncCanceled(OtherSyncAdapter.java:51)
at android.content.AbstractThreadedSyncAdapter$ISyncAdapterImpl.cancelSync(AbstractThreadedSyncAdapter.java:121)
at android.content.ISyncAdapter$Stub.onTransact(ISyncAdapter.java:78)
at android.os.Binder.execTransact(Binder.java:320)
at dalvik.system.NativeStart.run(Native Method)
Нужно ли добавлять какие-либо разрешения для моего внутреннего провайдера контента?