Intereting Posts

Пользовательская синхронизация не работает с учетной записью Google (com.google) на некоторых устройствах Samsung

Я выполнил задачу синхронизации так же, как пример BasicSyncAdapter, за исключением учетной записи Google, такой как в этом ответе:

https://stackoverflow.com/a/2972918/2072569

Он работает на всех устройствах, кроме Samsung SM-P600 (Galaxy Note 2014) с Android 4.4.2 и некоторыми другими планшетами Samsung.

У моего ContentProvider в файле манифеста есть метка. Это является причиной этой ошибки в соответствии с этим сообщением в некоторых версиях Android некоторых планшетов Samsung.

По какой-то причине Samsung заблокировал добавление задач синхронизации в аккаунт Google?

Синхронизация добавляется следующим образом:

removeAllSyncTasks(); ContentResolver.setIsSyncable(mAccount, CONTENT_AUTHORITY, 1); ContentResolver.setSyncAutomatically(mAccount, CONTENT_AUTHORITY, true); ContentResolver.addPeriodicSync(mAccount, CONTENT_AUTHORITY, Bundle.EMPTY, SYNC_FREQUENCY); 

Часть манифеста:

  <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" /> 

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"/> 

Когда я вручную запускаю синхронизацию. Syncservice также не запускается на планшетах Samsung (он работает на всех других устройствах).

Оказывается, это не имеет ничего общего с версией Samsung / OS …

Конструктор моего 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); } 

Это не проверяет тип учетной записи. В списке была учетная запись типа 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); } 

Теперь я могу начать биться головой о стену … 😉