Я пытаюсь сделать так, чтобы пользовательский ContentProvider отображался в разделе «Данные и синхронизация», и у меня возникли некоторые проблемы. А именно не появляется.
Особенности:
Мой AndroidManifest.xml имеет поставщика и службу:
<provider android:name="BooksProvider"
android:label="ClientName Books"
android:authorities="com.clientname.reader.books"
android:enabled="true"
android:exported="true"
android:syncable="true">
<grant-uri-permission android:pathPattern=".*" />
</provider>
<service android:name=".sync.SyncService"
android:exported="true" android:process=":sync">
<intent-filter>
<action android:name="android.content.SyncAdapter" />
</intent-filter>
<meta-data android:name="android.content.SyncAdapater"
android:resource="@xml/syncadapter" />
</service>
И res/xml/syncadapter.xml имеет следующее:
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="com.clientname.reader.books"
android:accountType="com.google"
android:supportsUploading="true"
android:userVisible="true"
/>
На всякий случай я даже вызвал onCreate следующее:
AccountManager accountManager = AccountManager.get(getApplicationContext());
Account[] accounts = accountManager.getAccountsByType("com.google");
for(Account account : accounts){
Log.d(TAG, "Account: " + account.name);
ContentResolver.setIsSyncable(account, Reader.AUTHORITY, 1);
}
Когда я загружаю действие, я получаю журнал adb из ContentResolver.setIsSyncable, говорящий, что учетная запись уже настроена для синхронизации, поэтому метод ничего не делает.
И тем не менее провайдер отказывается появляться в меню «Настройки» > «Аккаунты и синхронизация» > «Данные и синхронизация». Любые идеи о том, почему? Кто-нибудь знает, как определяется, что появляется в этом разделе?
[править] Еще немного информации:
Потратив несколько часов на отладку, я столкнулся с этой ошибкой:
04-11 10:46:02.370: DEBUG/SyncManager(105): can't find a sync adapter for SyncAdapterType Key {name=com.clientname.reader.books, type=com.google}, removing settings for it
Также кажется, что мой класс SyncService никогда не вызывается. Я должен вызывать его сам? Ни один из примеров, которые я видел, или приложения в дикой природе не вызывают его сами, но все они также имеют компоненты аутентификации. Мысли?