Roe*_*oel 7 android sync android-syncadapter samsung-mobile
我使用与BasicSyncAdapter示例相同的方式实现了同步任务,除了在此答案中使用Google帐户:
除适用于Android 4.4.2和其他三星平板电脑的三星SM-P600(Galaxy Note 2014)外,它适用于所有设备.
清单文件中的我的ContentProvider有一个标签.根据这篇文章,某些三星平板电脑的某些Android版本就是这个bug的原因.
三星是否因某种原因阻止向Google帐户添加同步任务?
同步添加如下:
removeAllSyncTasks();
ContentResolver.setIsSyncable(mAccount, CONTENT_AUTHORITY, 1);
ContentResolver.setSyncAutomatically(mAccount, CONTENT_AUTHORITY, true);
ContentResolver.addPeriodicSync(mAccount, CONTENT_AUTHORITY, Bundle.EMPTY, SYNC_FREQUENCY);
Run Code Online (Sandbox Code Playgroud)
清单部分:
<service
android:name=".data.sync.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" />
</service>
<provider
android:name=".data.provider.LevensContentProvider"
android:authorities="@string/authority"
android:label="@string/app_name_sync"
android:exported="false"
android:syncable="true" />
Run Code Online (Sandbox Code Playgroud)
Syncadapter xml:
<?xml version="1.0" encoding="utf-8"?>
<sync-adapter
xmlns:android="http://schemas.android.com/apk/res/android"
android:contentAuthority="@string/authority"
android:accountType="com.google"
android:userVisible="true"
android:supportsUploading="true"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true"/>
Run Code Online (Sandbox Code Playgroud)
当我手动启动同步时.Syncservice也没有从三星平板电脑开始(它适用于所有其他设备).
事实证明这与三星/操作系统版本无关......
我的 SyncHelper 的构造函数是:
public SyncHelper(Context context, String accountName) {
Account account = null;
Account[] accounts = AccountManager.get(context).getAccounts();
for (Account acc : accounts) {
if(acc.name.equals(accountName)){
account = acc;
}
}
if(account == null){
throw new InvalidParameterException("Account not found");
}
init(context, account);
}
Run Code Online (Sandbox Code Playgroud)
这不会检查帐户类型。列表中有一个 com.evernote 类型的帐户,该帐户用于同步,但这当然不起作用。
添加这个来解决它:
public SyncHelper(Context context, String accountName) {
Account account = null;
Account[] accounts = AccountManager.get(context).getAccounts();
for (Account acc : accounts) {
if(acc.name.equals(accountName) && acc.type.equals(ACCOUNT_TYPE)){
account = acc;
}
}
if(account == null){
throw new InvalidParameterException("Account not found");
}
init(context, account);
}
Run Code Online (Sandbox Code Playgroud)
现在我可以开始用头撞墙了……;-)
| 归档时间: |
|
| 查看次数: |
574 次 |
| 最近记录: |