다음 시나리오를 마주하고 있습니다. 내 응용 프로그램은 AccountManager를 사용하여 사용자 자격 증명을 저장합니다. 트위터가하는 것과 마찬가지로 동시에 여러 계정에 로그인 할 수 있습니다 (프로필로 이동하여 다른 기록 된 계정으로 전환 할 수 있음). 기록 된 계정 중 하나가 한 번에 활성 상태로 간주됩니다.여러 계정을 AccountManager에 저장하고 SyncAdapter를 포함하십시오.
전까지는 사용자가 현재 사용중인 계정을 식별하는 데 사용한 방법은 현재 계정 이름을 SharedPreferences에 저장하는 것입니다. 이런 식으로 언제든지 prefs에서이 이름을 검색하고 계정 관리자에서 기록 된 계정 목록을 가져 와서 적절한 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를 저장하고 동기화 어댑터를 시작하면 다른 프로세스에서 실행되기 때문에 저장된 기본 설정을 가져 오지 못할 수 있습니다.
이 시나리오를 어떻게 처리 하시겠습니까?
감사합니다. Abir. 이것은 효과가 있지만 여전히 잔인한 느낌이 들게됩니다. 하나의 정보 행을 저장하기 위해 SQL 테이블을 작성하면 필자가 누락 된 다른 것이 있어야한다고 생각하게 만든다. – juanmeanwhile