未调用Android syncadapter onPerformSync

时间:2016-01-08 19:56:52

标签: android android-syncadapter

尝试为我的内容提供商设置同步适配器/服务。内容提供商工作正常,能够毫无问题地存储数据。

我有一个内容观察器,它在我的内容解析器中注册,并且在数据更改后调用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>

2 个答案:

答案 0 :(得分:7)

由于SyncService在自己的进程中运行,这与您的应用程序不同,如android:process =“:sync”所定义,因此不会显示日志。虽然正在运行SyncAdapter。

要查看日志而不是“仅显示所选应用程序”,请在logcat中选择“无过滤器”。

您不必删除android:process =“:sync”。

答案 1 :(得分:6)

通过删除以下内容,一切正常:

android:process=":sync"

从SyncService配置中删除它,并在更新内容提供程序后调用onPerformSync方法。

感谢