2015-07-08 28 views
7

ho implementato un compito di sincronizzazione allo stesso modo come il BasicSyncAdapter example se non con un account Google come in questa risposta:sincronizzazione personalizzato non funziona con Google Account (com.google) su alcuni dispositivi Samsung

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

E ' funziona su tutti i dispositivi tranne il Samsung SM-P600 (Galaxy Note 2014) con Android 4.4.2 e alcuni altri tablet Samsung.

Il mio ContentProvider nel file Manifest ha un'etichetta. Questa è la causa di questo errore in base a this post in alcune versioni Android di alcuni tablet Samsung.

Samsung ha bloccato l'aggiunta di attività di sincronizzazione a un account Google per qualche motivo?

La sincronizzazione viene aggiunto in questo modo:

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

parte manifesto:

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

Quando inizio manualmente la sincronizzazione. Syncservice non si avvia anche sui tablet Samsung (funziona su tutti gli altri dispositivi).

+0

per ogni cambiamento di questo codice è open source? Sto cercando di farlo funzionare con l'API DRIVE ... –

risposta

2

Si scopre che non aveva niente a che fare con la versione Samsung/OS ...

Il costruttore della mia SyncHelper era:

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); 
    } 

Questo non si verifica per il tipo di account. C'era un account di tipo com.evernote nella lista e questo è stato usato per la sincronizzazione e che naturalmente non funzionerà.

aggiunte questo per risolverlo:

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); 
    } 

ora posso iniziare a sbattere la testa contro il muro ... ;-)