Tecnologia do Blogger.
RSS

[androidbrasil-dev] SyncAdapter não funcionando no Android 2.3

Pessoal, criei um SyncAdapter que está funcionando perfeitamente no meu Android 4.2, mas ele não sincroniza em nenhum dos meus Android 2.3. As declarações e códigos estão abaixo. Dois detalhes importantes são que no Android 2.3 a conta lá no Settings aparece sem a opção de sincronizar os dados, diferentemente da 4.2, como pode ser visto nas imagens abaixo. Outra coisa é que no Log do 2.3 sempre é imprimido essa mensagem:


11-29 11:35:09.350: I/dalvikvm(2164): Could not find method android.content.AbstractThreadedSyncAdapter.<init>, referenced from method MY_PACKAGE.sync.SyncAdapter.<init>

Comparação da conta Android 2.3 e Android 4.2
http://grab.by/hSAS (imagem 2.3)
http://grab.by/hSIk (imagem 4.2)

AndroidManifest
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />

<service android:name=".sync.AccountAuthenticatorService" android:exported="true" >
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" /> 
</intent-filter>
<meta-data
      android:name="android.accounts.AccountAuthenticator"
             android:resource="@xml/authenticator" />
</service>

<service android:name=".sync.SyncAdapterService" android:exported="true" >
<intent-filter>
<action android:name="android.content.SyncAdapter" /> 
</intent-filter>
<meta-data 
android:name="android.content.SyncAdapter" 
        android:resource="@xml/sync_adapter" />
</service>

<provider
            android:name=".sync.GritContentProvider"
            android:authorities="MY_PROVIDER_STRING"
            android:label="@string/label_account_preference"
            android:syncable="true"
            android:exported="false" />

sync_adapter.xml
<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="MY_PROVIDER_STRING"
    android:accountType="MY_ACCOUNT_STRING"
    android:userVisible="true"
    android:supportsUploading="false"
    android:allowParallelSyncs="false"
    android:isAlwaysSyncable="true" />

authenticator.xml
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="MY_ACCOUNT_STRING"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" />

Criando Account após login (é sempre criado com sucesso)
Account mAccount = new Account(userName, SYNC_ADAPTER_ACCOUNT_TYPE);
AccountManager mAccountManager = AccountManager.get(this);
boolean accountCreated = mAccountManager.addAccountExplicitly(mAccount, password, null);
if (accountCreated) {
ContentResolver.setSyncAutomatically(mAccount, SYNC_ADAPTER_CONTENT_PROVIDER, true);
}

As classes que extende de AbstractAccountAuthenticator e AbstractThreadedSyncAdapter estão devidamente criadas e iniciando via Service como manda a documentação. Como eu disse anteriormente no Android 2.3 não aparece o Provider lá em Accounts & Sync e fica dando aquela mensagem no Log.

Um abraço

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário