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
android:contentAuthority="MY_PROVIDER_STRING"
android:accountType="MY_ACCOUNT_STRING"
android:userVisible="true"
android:supportsUploading="false"
android:allowParallelSyncs="false"
android:isAlwaysSyncable="true" />
authenticator.xml
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






0 comentários:
Postar um comentário