2015-07-08 26 views
7

ich eine Synchronisierung Aufgabe wie die gleiche Art und Weise wie die BasicSyncAdapter example außer mit einem Google-Konto implementiert in dieser Antwort:Angepasste Synchronisierung funktioniert nicht mit Google-Konto (com.google) auf einigen Samsung-Geräten

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

Es funktioniert auf fast allen Geräten außer dem Samsung SM-P600 (Galaxy Note 2014) mit Android 4.4.2 und einigen anderen Samsung Tablets.

Mein ContentProvider in der Manifest-Datei hat ein Label. Dies ist die Ursache für diesen Fehler nach this post bei einigen Android-Version einiger Samsung-Tablets.

Hat Samsung aus irgendeinem Grund das Hinzufügen von Synchronisierungsaufgaben zu einem Google-Konto blockiert?

Die Sync wird wie folgt hinzugefügt:

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

Manifest Teil:

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

Wenn ich manuell starten die Synchronisierung. Der Syncservice startet auch nicht bei den Samsung Tablets (funktioniert bei allen anderen Geräten).

+0

für jede Änderung starten Anstoßen dieser Code ist Open Source? Ich versuche, das mit der DRIVE-App zu ... –

Antwort

2

Es stellt sich heraus, dass es nichts mit Samsung/OS-Version zu tun hatte ...

Der Konstruktor meiner SyncHelper war:

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

Das ist nicht für die Art des Kontos nicht überprüfen. Es gab ein Konto vom Typ com.evernote in der Liste und dies wurde verwendet, um zu synchronisieren und das wird natürlich nicht funktionieren.

Hinzugefügt dies es zu lösen:

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

Jetzt kann ich meinen Kopf gegen die Wand ... ;-)