Android Can';t执行同步(不调用onPerformSync)

Android Can';t执行同步(不调用onPerformSync),android,android-service,Android,Android Service,我遵循此标题,但同步方法不会出现在设置屏幕中的帐户和同步中。我认为没有调用onPerformSync()。我尝试调试,但未找到错误日志。这是我的代码: syncAdapter.xml <sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="@string/ACCOUNT_TYPE" android:contentAuthority="@string/AUTHO

我遵循此标题,但同步方法不会出现在设置屏幕中的帐户和同步中。我认为没有调用onPerformSync()。我尝试调试,但未找到错误日志。这是我的代码:

syncAdapter.xml

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="@string/ACCOUNT_TYPE"
android:contentAuthority="@string/AUTHORITY"
android:userVisible="true"
android:isAlwaysSyncable="true"
 <service android:name=".service.CalendarSyncService" android:exported="true">
        <intent-filter>
            <action android:name="android.content.SyncAdapter" />
        </intent-filter>
        <meta-data android:name="android.content.SyncAdapter"
         android:resource="@xml/syncadapter" />
    </service>
我在这里叫它

public void onClick(View arg0) {
Bundle params = new Bundle();
        params.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
        params.putBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false);
        params.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false);
        ContentResolver.addPeriodicSync(selectedAccount, getString(R.string.AUTHORITY), params, 3600);
        ContentResolver.setSyncAutomatically(selectedAccount, getString(R.string.AUTHORITY), true);

        ContentResolver.requestSync(selectedAccount, getString(R.string.AUTHORITY), params);}
Manifest.xml

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="@string/ACCOUNT_TYPE"
android:contentAuthority="@string/AUTHORITY"
android:userVisible="true"
android:isAlwaysSyncable="true"
 <service android:name=".service.CalendarSyncService" android:exported="true">
        <intent-filter>
            <action android:name="android.content.SyncAdapter" />
        </intent-filter>
        <meta-data android:name="android.content.SyncAdapter"
         android:resource="@xml/syncadapter" />
    </service>

我在Nexus的安卓4.0上进行了测试。
谢谢你的阅读

您可以尝试的是:

ContentResolver.setSyncAutomatically(account, AUTHORITY, true);

我尝试设置
isAlwaysSyncable
标志,但它对我不起作用(尽管这可能是另一个问题)。

由于正在进行类似的同步,有时无法调用此方法。您可以使用以下代码进行检查和取消:

if (ContentResolver.isSyncPending(yourAccount, yourAuthority)  ||
    ContentResolver.isSyncActive(yourAccount, yourAuthority)) {
  Log.i("ContentResolver", "SyncPending, canceling");
  ContentResolver.cancelSync(yourAccount, yourAuthority);
}

您必须强制手动同步

Bundle params = new Bundle();
params.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
params.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
ContentResolver.requestSync(selectedAccount, getString(R.string.AUTHORITY), params);

也许这是同一个问题:在这一行中,我们需要给出我们的包名,或者这是所有项目的通用声明??问题是,当您将sync_extras_manual设置为false时,您说的是“不要更新”,它应该为true每个人都需要使用它!