尝试为我的内容提供商设置同步适配器/服务。内容提供商工作正常,能够毫无问题地存储数据。
我有一个内容观察器,它在我的内容解析器中注册,并且在数据更改后调用onChange方法。
但是,在我调用observer.onChange之后,日志中没有任何内容出现。在observer.onChange中,我调用了contentResolver.requestSync,但是没有调用同步适配器中的onPerformSync方法。
想法?
syncadapter.xml
<sync-adapter
xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="....contentproviderexample.provider"
android:accountType="....contentproviderexample"
android:userVisible="false"
android:supportsUploading="false"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true"/>
authenticator.xml
<account-authenticator
android:label="@string/app_name"
android:smallIcon="@mipmap/ic_launcher"
android:icon="@mipmap/ic_launcher"
android:accountType="....contentproviderexample"
xmlns:android="http://schemas.android.com/apk/res/android"/>
Observer onChange:
@Override
public void onChange(boolean selfChange, Uri uri) {
Log.d(PERSON_OBSERVER_TAG, "onChange: Calling requestSync");
contentResolver.requestSync(newAccount, PersonContract.CONTENT_AUTHORITY, Bundle.EMPTY);
}
清单:
<service android:name=".datasync.AuthenticatorService">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator"></action>
</intent-filter>
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator"/>
</service>
<service android:name=".datasync.SyncService"
android:exported="true"
android:process=":sync">
<intent-filter>
<action android:name="android.content.SyncAdapter"/>
</intent-filter>
<meta-data
android:name="android.content.SyncAdapter"
android:resource="@xml/syncadapter">
</meta-data>
</service>
答案 0 :(得分:7)
由于SyncService在自己的进程中运行,这与您的应用程序不同,如android:process =“:sync”所定义,因此不会显示日志。虽然正在运行SyncAdapter。
要查看日志而不是“仅显示所选应用程序”,请在logcat中选择“无过滤器”。
您不必删除android:process =“:sync”。
答案 1 :(得分:6)
通过删除以下内容,一切正常:
android:process=":sync"
从SyncService配置中删除它,并在更新内容提供程序后调用onPerformSync方法。
感谢