2011-11-15 7 views
3

デバイスに登録されている個々のアカウントの同期設定を確認する必要があるアンドロイドアプリを作成しています。私はContentResolverクラスを通してそれを行うことができることを知っていますが、私はそれにいくつか問題があります。私はデバイス上のすべてのアカウントのリストを取得することができましたが、実行時に特定のアカウントの関連権限を取得する場所がわかりません。以下はコードです:Androidで同期設定を確認する方法

AccountManager acm = AccountManager.get(getApplicationContext()); 
    Account[] acct = acm.getAccounts(); 
    for(int i=0;i<acct.length;i++){ 
     int p = ContentResolver.getIsSyncable(acct[i], null); 
     Log.i(TAG,"account name is"+acct[i].name); 
     Log.i(TAG,"answer to syncable is: "+String.valueOf(p)); 

getIsSyncable(Account am、String authority)はアカウントと権限を要求します。ご覧のとおり、私は実際の権限の代わりにNULLを渡しています。私は関連する口座への権限を見つける方法を知っていますか?

答えて

3

あなたは知らSyncAdaptersを取得し、ContentResolver

AccountManager acm 
     = AccountManager.get(getApplicationContext()); 
    Account[] acct = null; 

    SyncAdapterType[] types = ContentResolver.getSyncAdapterTypes(); 
    for (SyncAdapterType type : types) { 
     Log.d(TAG, "--------------------"); 
     Log.d(TAG, type.authority + "--" + type.accountType); 
     acct = acm.getAccountsByType(type.accountType); 
     for (int i = 0; i < acct.length; i++) { 
     int p = ContentResolver.getIsSyncable(acct[i], type.authority); 
     Log.i(TAG, "account name: " + acct[i].name); 
     Log.i(TAG, "syncable: " + String.valueOf(p)); 
     } 
    } 

出力問い合わせることができます:

11-15 17:12:51.899:DEBUG/syncsample(4572): com.google.androidを.music.MusicContent - com.google 11-15 17:12:51.899:

INFO/syncsample(4572):アカウント名:[email protected] 11-15 17:12:51.899:INFO/syncsample (4572):同期可能:1 11-15 17:12:51.899:

INFO/syncsample(4572):アカウント名:[email protected] 11-15 17:12:51.899:INFO/syncsample(4572):同期可能:0

+0

これは完璧ですよね? 実際に私は自分の解決策を取り入れましたが、同様のことが関係していました。 –

+0

Android設定メニューのように、getIsSyncableではなくgetSyncAutomaticallyを呼び出す必要があります。 –

0

アカウントには多くの設定があるため、個々のアカウントの特定のコンポーネントの権限を与える必要があります。

ContactsContract.AUTHORITYのようにcom.android.contacts以外のものを指定すると、他のコンポーネントではパッケージ名から見つけて与えることができます。

+0

うん、しかし、どのように私がいることを知っているだろうランタイムで。私のアプリケーションは、別々にインストールされたアプリケーションを持つ異なるデバイス上で動作しなければならないと仮定します。 getIsSyncable関数の各アカウントの正確な権限はどこで取得できますか? –

+0

AFAIK、サードパーティのアプリケーションに異なるコンポーネントが追加されているので、 –

+0

これも私の結論でしたが、実行時にアンドロイドのアカウントの現在の同期設定を取得する方法はありませんか?これは悲しいことだ! : –

関連する問題