我们的SyncAdapter实现与Android 4.4.4版不同步。适用于较低的API设备。
我们的应用使用AbstractThreadedSyncAdapter与服务器进行通信。我已经使用许多不同的设备和模型对其进行了测试,从API级别10开始运行android。我们最近购买了两台基于Android 4.4.4的设备(Moto E,Nexus 5),并开始遇到SyncAdapter问题。这是xml配置:
<sync-adapter
xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="our.provider"
android:accountType="our.authenticator"
android:userVisible="false"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true"
android:supportsUploading="true" />
即使我放了手动和加急标志,同步也不会触发:
Bundle bundle = new Bundle();
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
bundle.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
ContentResolver.requestSync(SyncAdapter.dummyAccount(context), SYNC_PROVIDER, bundle);
我正在通过WiFi尝试此功能并连接电源线以解除与电源使用相关的任何优化问题。目标SDK设置为最新版本:
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="20" />
我有all the necessary permissions:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
有一件事让我感到不同寻常。设备报告API级别= 19,但SDK说API 19相当于android 4.4。 2 ,而不是android 4.4.4:
这可能与此问题有关吗?
很抱歉没有更多帮助或描述,但我真的没有关于如何继续调试此问题的线索。提前谢谢。
进一步的想法:
似乎与同步失败时使用的指数退避算法有关。在开始新请求并使用手动同步(忽略退避)之前,我最终取消了请求。我知道这不太理想,但在我的用例中,用户希望数据能够立即同步。确保给SyncManager一个表情:https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/content/SyncManager.java
卸载应用并再次运行可以解决问题,因此可能与该帐户的权限有关。请注意,我确实从清单中删除了一些未使用的服务,但没有任何与SyncAdapter或其相关类相关的信息。
答案 0 :(得分:4)
虽然不是答案,this可能有所帮助。据我所知,它是一个完全最小的SyncAdapter。
该示例不具有AccountAuthenticator组件。只有在调用其中一个 getAuthToken 方法时才需要AccountAuthenticator。
如评论中所述,我尝试使用此最小示例复制您的问题,但无法执行此操作。也许你可以从它开始并构建失败的东西。