私は以下のシナリオに直面しています。私のアプリはAccountManagerを使ってユーザーの資格情報を保存します。ツイッターのように複数のアカウントに同時にログインすることも可能です(プロフィールにアクセスして別のログに記録されたアカウントに切り替えることもできます)。記録されたアカウントの1つは、一度にアクティブと見なされます。複数のアカウントをAccountManagerに保存し、SyncAdapterを含める
分かりませんでしたが、わたしが現在どのアカウントをユーザーが使用しているかを識別するために使用した方法は、現在のアカウント名をSharedPreferencesに保存することです。このようにして、いつでもプリファレンスからこの名前を取得し、アカウントマネージャーで記録されたアカウントのリストを取得し、適切なAccountオブジェクトを取得するまで繰り返します。
String currentAccountName = SharedPreferences.get(mContext).getString(PREF_CURRENT_ACCOUNT, null);
Account[] accounts = AccountManager.get(mContext).getAccountsByType(MY_ACCOUNT_TYPE);
Account loggedAccount;
for (Account account : accounts) {
if (account.name.equals(currentAccountName)) {
loggedAccount = account;
break;
}
}
//Get the token for this account
String authToken = AccountManager.get(mContext).getToken(account, MY_ACCOUNT_TYPE,...).getResult().get(AccountManager.AUTH_TOKEN);
また、SyncAdapterを実行しているときには、トークンを取得してサーバーに接続するために、環境設定からcurrentAccountNameを取得します。
問題は、API 21から異なるプロセスの環境設定にアクセスすることが安全ではないということです。これは、prefsにcurrentLoggedAccountを格納してから、同期アダプタを起動すると、別のプロセスで実行されるため、格納されたprefを取得できない可能性があることを意味します。
このシナリオをどのように処理しますか?
あなたに感謝します。これはうまくいくが、それでもやはり私には過剰なもののように感じる。単一の行の情報を格納するためだけにSQLテーブルを作成すると、私が紛失しているものが他にも存在するはずであると私は思います。 – juanmeanwhile