10

Androidアプリ内で、[設定]>[アカウントと同期]>[データと同期]の特定の設定が有効になっているかどうかをプログラムで確認する方法はありますか?

一般的な同期設定が有効になっているかどうかを確認する方法はありますか?

ありがとう!


「理由」を知るのに役立つ場合は、現在、(SyncAdapterを使用せずに)独自の同期機能を使用しています。ただし、可能であれば、同期サービスを[データと同期]の下に表示したいと思います。今、私は何もしないダミー同期サービスをハックし、ダミー同期サービスが有効になっているかどうかにかかわらず、アプリの同期サービスにクエリを実行させることを計画しています。同期するかどうかがわかります。

4

3 に答える 3

26

同期が有効になっているかどうか(およびrajparaの回答のようにアクティブではないかどうか)を知るには、次を使用します。

AccountManager am = AccountManager.get(YourActivity.this);
Account account = am.getAccountsByType(YOUR_ACCOUNT_TYPE)[0];
boolean isYourAccountSyncEnabled = ContentResolver.getSyncAutomatically(account, DataProvider.AUTHORITY);
boolean isMasterSyncEnabled = ContentResolver.getMasterSyncAutomatically();

「マスター」同期ステータスは、ユーザーが電話のすべての同期を無効にするために使用できるグローバル同期スイッチです。マスター同期がオフの場合、アカウントの同期ステータスで有効になっていると表示されていても、アカウントは同期されません。

@HiBが述べandroid.permission.READ_SYNC_SETTINGSたように、同期ステータスにアクセスするには権限が必要です。android.permission.WRITE_SYNC_SETTINGS有効/無効にするにはが必要です。

android.permission.GET_ACCOUNTSまた、MeetMが述べたように、アカウントを取得する必要があります。

于 2013-11-20T14:31:29.987 に答える
11

以下のコードとこのドキュメントを使用して、同期が有効になっているかどうかを確認できます

AccountManager am = AccountManager.get(YourActivity.this);
Account account = am.getAccountsByType(Const.ACCOUNT_TYPE)[0];
  if(ContentResolver.isSyncActive(account, DataProvider.AUTHORITY){
     // sync is enable
  }

ContentResolver.setSyncAutomaticallyこれを使用して、プログラムで有効化/無効化を設定することもできます。ContentResolver.setMasterSyncAutomatically

更新

isSyncActiveは、保留リストに指定されたアカウントまたは権限の同期操作が現在ある場合、またはアクティブに処理されている場合にtrueを返します。

于 2012-06-28T21:26:55.807 に答える
3
boolean isEnabled = ContentResolver.getSyncAutomatically(account, MyProvider);
if(isEnabled)
{
...do something
}

私のために働く

于 2015-07-06T10:38:55.517 に答える