42

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

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

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

Edit2:[設定]->[アカウントと同期]で天気と株式のアプリを見たところです。同期が許可されていることがわかりますが、アカウントの削除ボタンはありません。一方、Google、Facebook、Skypeアプリでは、同期に加えて、アカウントの削除ボタンがあります。つまり、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/同期アダプタを使用するにはアカウントが必要であると言います。:S ???

4

3 に答える 3

18

Android開発者のドキュメントが言うように

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

スタブオーセンティケーターの作成に関する記事全体があります。この質問は古く、答えはずっと前に受け入れられていたと思いますが、公式ドキュメントへの最近の追加をここに含める必要があると感じました。

于 2013-09-05T11:06:27.900 に答える
12

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

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

悪いニュースは、システムにアカウントを提供する簡単な方法を提供する「ストック」機能がないことです。ただし、SDKに付属している同じ同期アダプターの例には、アカウント機能を提供するために借りることができる多くのコードがあります。カスタムクレデンシャル画面が必要な場合を除いて、com.example.android.samplesync.authenticatorパッケージ内のすべてのコードを、わずかな変更を加えるだけで強めることができます。

つまり、基本的には例からのコピーアンドペーストであり、それは私が行ったこととほぼ同じであり、正常に機能しました。

よくわかりませんが、「アカウントの削除」がないアダプターはすべて、調べたすべてのデバイスに内蔵のROMアダプターのようです。あなたがそれについて心配しなければならないかどうかはわかりません。

于 2011-03-01T03:39:05.177 に答える
12

この質問からたくさんの通知が届くので、この情報を共有しようと思いました。これは、アカウントなしでSyncAdapterを追加する方法です。onCreateこれをMyApplication extends Applicationクラスに入れることができます。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 / authenticationator.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"
/>
于 2012-04-10T02:30:57.693 に答える