web-dev-qa-db-ja.com

アカウントなしでアダプターを同期

アプリからクラウド経由でデータをフェッチする必要があります。 Google IOビデオAndroid apps @ http://www.youtube.com/watch?v=xHXn3Kg2IQE&t = 43m58s 最後のスライドでは、SyncAdapterを使用してAndroidシステムと統合することをお勧めします。

後に私は、アカウントを使用してSyncAdapterを実装する必要があることを学びました。私のアプリはアカウントを使用していません。ユーザーは登録なしで自由にデータをダウンロードできます。 SyncAdapterを引き続き使用できますか?使えるダミーのダミー口座はありますか?

編集:アプリのコンテンツプロバイダーを持っているので問題ありません

Edit2:[設定]-> [アカウントと同期]でWeatherアプリとStockアプリを見たところです。同期が許可されていることがわかりますが、アカウントの削除ボタンはありません。一方、Google、Facebook、Skypeアプリは、アカウントの削除ボタンがあるPLUSと同期できます。つまり、WeatherとStockはアカウントを使用しませんが、Google、Facebook、Skypeは使用します。

私が見つけたチュートリアル@ http://ericmiles.wordpress.com/2010/09/22/connecting-the-dots-with-Android-syncadapter/ と@ http:// www.c99.org/2010/01/23/writing-an-Android-sync-provider-part-1/ Sync Adapterを使用するにはアカウントが必要であると言います。 :S ???

41
siamii

アカウント認証や設定画面がない連絡先同期アダプターを作成しました。それほど難しくありませんでした。私はAndroidアカウントに関するものを扱う必要がなかったと思います。

チュートリアルリンクからの引用:

悪い知らせは、システムにアカウントを提供する簡単な方法を提供する「ストック」機能がないことです。ただし、SDKに付属する同じ同期アダプターの例には、アカウント機能を提供するために借りることができる多くのコードがあります。カスタム認証情報画面が必要でない限り、ほんのわずかな変更を加えるだけで、com.example.Android.samplesync.authenticatorパッケージのすべてのコードを阻止できます。

つまり、基本的には例からのコピーと貼り付けだけです。それは、私がやったこととほぼ同じで、うまく機能しました。

確かではありませんが、「アカウントの削除」がないすべてのアダプタは組み込みのようですROM調べたすべてのデバイスのアダプタです。私はあなたはそれについて心配する必要があるかわからない。

11
Shane Powell

Android Developer docsが言うように

アプリがアカウントを使用しない場合でも、認証コンポーネントを提供する必要があります。アカウントまたはサーバーログインを使用しない場合、オーセンティケーターによって処理される情報は無視されるため、スタブメソッドの実装を含むオーセンティケーターコンポーネントを提供できます。また、同期アダプターフレームワークがオーセンティケーターのメソッドを呼び出せるようにするバインドされたサービスを提供する必要もあります。

Creating a Stub Authenticator に関する記事全体があります。この質問は古く、回答はずっと前に受け入れられたと思いますが、公式ドキュメントへの最近の追加をここに含める必要があると感じました。

18
nindalf

私はこの質問からたくさんの通知を受け取り続けているので、この情報を共有するつもりです。これは、アカウントなしでSyncAdapterを追加する方法です。これをMyApplication extends ApplicationクラスのonCreateに配置できます。これは、SyncAdapterおよびContentProviderがすでに実装されていることを前提としています。質問に記載されているチュートリアルに従ってください。

final String ACCOUNT_NAME = "MyApp";
final String ACCOUNT_TYPE = "com.myapp.account";
final String PROVIDER = "com.myapp.provider";

Account appAccount = new Account(ACCOUNT_NAME,ACCOUNT_TYPE);
AccountManager accountManager = AccountManager.get(getApplicationContext());
if (accountManager.addAccountExplicitly(appAccount, null, null)) {
   ContentResolver.setIsSyncable(appAccount, PROVIDER, 1);
   ContentResolver.setMasterSyncAutomatically(true);
   ContentResolver.setSyncAutomatically(appAccount, PROVIDER, true);
}

res/xml/syncadapter.xml

<sync-adapter xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:contentAuthority="@string/provider"
    Android:accountType="@string/account_type"  
    Android:userVisible="true"  
    Android:supportsUploading="true"
/>

res/xml/authenticator.xml

<account-authenticator xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:accountType="@string/account_type"
    Android:icon="@drawable/app_icon"
    Android:smallIcon="@drawable/app_icon"
    Android:label="@string/app_label"
/>
12
siamii