2011-12-18 7 views
8

私は特定の1つのチャンネルからYouTubeビデオを表示するために、AndroidアプリのSyncAdapterを作成しようとしています。動画はパブリックドメインなので、ユーザーがログインしたり、アカウントを作成したり、自分自身を認証したり、データをアップロードしたり、連絡先データベースを使用したりする必要はありません。私は単にSyncAdapterに、そのチャンネルの最新のビデオメタデータを使用してアプリケーションのデータベースを定期的に更新させたいだけです。私はすでに自分のデータベースにアクセスするためにContentProviderを構築しました。私はSyncProviderが更新のための同期、スケジューリング、再試行のバックオフメカニズムを無効にする機能を処理することが好きです。アカウントなしのSyncAdapter

私はSyncAdapterが私のユースケースに適しているかどうか以前に尋ねました。私はGoogle I/Oビデオを見て、ドキュメントを読んで、ブログを読んで...(下記のリストを参照)。私は働くことが何もできませんでした。 SyncAdapterアカウントをグローバルな「アカウント&同期設定」に表示させても機能しないようにすることが最善の方法です。これがうまくいっても、私のアプリの中から以外のアカウントを見ない方が好きなので理想的ではありません。これは、他のオプションがない場合には許容されます。設定にアクセスする必要がないかぎり、すべてが一日一回の自動同期にデフォルトになるためです。

私は、SampleSyncAdapterをそのまま使用し、認証コードセクションにブレークポイントを入れようとしました。単一のブレークポイントがヒットしないので、コールをトリガするものや含まれるデータを見ることができません。私は少なくとも私はそれを多く得るだろうと思ったでしょう。

私はSyncAdapterの使用が推奨にもかかわらず悪い考えだと考え始めています。私はチュートリアルや完全で組織的で明確なドキュメントはもちろんのこと、私が望むものに近い例をまだ見つけていません。これは、多くのアプリがやりたいと思う共通のタスクであるように思えます。

このユースケースに関する優れたドキュメントをこの記事に追加してください。私は誰も見つけることができません。
これがなければ、このユースケースではSyncAdaptersを使用しないように全員にお勧めします。私はここで他のユースケースについて話しているわけではないので、それがあなたのユースケースのためにどのように働いていたのか、それは私のようなものではない。

APIレベルのどのバージョンがプリム時間の準備ができているかを知ることも役立ちます。バージョン番号に関するいくつかの問題が掲載されています。ほとんどのユーザーを獲得するために、できるだけ低く抑えようとしています。私の現在のAPIターゲットは7です。

ここで他の人がこれらをより有用かもしれない、私は無駄にしようとしたリンクのリストです:

http://developer.android.com/resources/samples/SampleSyncAdapter/index.html

http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html

http://naked-code.blogspot.com/2011/05/revenge-of-syncadapter-synchronizing.html

http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/

http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-2/

要するに

http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step

http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step-1

http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step-2

Android SyncAdapter without Authentication vs. Android Service

Why does ContentResolver.requestSync not trigger a sync?

+0

重複していませんが関連する質問[私はandroid AccountManagerを使うべきですか?](http://stackoverflow.com/a/8614699/94363) – rds

答えて

6

答えは:ContentProviderAccountManagerSyncAdapter一緒に行きます。たとえ彼らが "愚か"であっても、あなたはこれら3つの部分を持たなければなりません。

+1

これは[アンドロイドフレームワークのs.ckのものです](http://regis.decamps.info/blog/2011/08/my-life-with-android-its-complicated/) – rds

+0

私が理解できないことは、アカウント/アカウントマネージャ側です。私は、ユーザーがこれを見る必要がないので、システム同期設定にアカウントを表示させたくないと思います。そこになければならない(それは本当であるように思われる)場合でも、ユーザーが同期の設定を有効にしたり設定したりする必要がありません。それはアプリのユーザビリティを破壊するだろう。私は表示されないように非常に愚かなアカウントを作る方法を見つけることができません。ユーザーが知らないアカウントを作成するにはどうすればいいですか? – Mitch

+0

はい、そこにある必要があります。なぜ、「設定>アカウントと同期」にこれが表示されているのですか?少なくとも、バッテリーを節約したい場合、ユーザーは同期を中断することができます。また、AccountManagerがダムであれば、ユーザーに何かを設定する必要はありません。おそらくあなたが逃したのは、AccountManagerでAccountをプログラムで登録できるということです。 – rds

5

上記のように、「ContentProvider、AccountManagerおよびSyncAdapterは一緒になります。これは、AndroidのAPIで動作

public class LoginActivity extends AccountAuthenticatorActivity { 

private final static String DUMMY_ACCOUNT_NAME = "some_name"; 
private final static String DUMMY_ACCOUNT_PASS = "some_pass"; 
private final static String AUTHORITY = "com.android.contacts"; // for example 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Account account = new Account(DUMMY_ACCOUNT_NAME, Constants.ACCOUNT_TYPE); 
    AccountManager am = AccountManager.get(this); 
    if (am.addAccountExplicitly(account, DUMMY_ACCOUNT_PASS, null)) { 
     Bundle result = new Bundle(); 
     result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); 
     result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type); 
     setAccountAuthenticatorResult(result); 
     ContentResolver.setSyncAutomatically(account, AUTHORITY, true); 
    } 

    finish(); 
} 
} 

5+: は、あなたのアプリケーションのためには、次のアクティビティにアプリが認証し、自動的にパク開始するようにロードされた最初の時間を呼び出すことができます。

関連する問題