2010-05-17 2 views
3

Android AccountManager API를 이해하는 데 어려움을 겪고 있습니다. 내가 생각한 한 blockingGetAuthToken 메소드를 사용하고 Android가 요청을 허용하거나 거부 할 수있는 알림을 제공할지 여부를 지정할 수 있습니다. 또 다른 가능성은 getAuthToken을 사용하고 KEY_INTENT가 반환되는지 확인하는 것입니다. 그렇다면 사용자가 내 요청을 확인할 수있는 새로운 활동을 시작할 수 있습니다.Android AccountManager API

내 문제는 서비스 내에서이 두 가지 방법 중 하나를 호출하고 싶습니다. 사용자가 결정을 내릴 때 콜백을받을 기회가 있습니까? 당신의 도움에 대한

감사

답변

3

사용자가 비동기 버전을 사용하는 아마 더 나은 결정했다 후 콜백을 원하는 경우 :

AccountManager mgr = AccountManager.get(getApplicationContext()); 
Account[] accounts = mgr.getAccountsByType("com.mydomain"); 
// assert that accounts is not empty 

당신은 유지하는 AccountManagerFuture<Bundle>를 사용하는 것이 좋습니다를 인증 토큰의 결과.

private AccountManagerFuture<Bundle> myFuture = null; 
private AccountManagerCallback<Bundle> myCallback = new AccountManagerCallback<Bundle>() { 
    @Override public void run(final AccountManagerFuture<Bundle> arg0) { 
     try { 
      myFuture.getResult().get(AccountManager.KEY_AUTHTOKEN); // this is your auth token 
     } catch (Exception e) { 
      // handle error 
     } 
    } 

} 이제

당신이 비동기 적으로 인증 토큰을 요청할 수 있습니다 :

myFuture = mgr.getAuthToken(accounts[0], AUTH_TOKEN_TYPE, true, myCallback, null); 
+1

당신이 원하는 경우에 안드로이드 장치가 그동안 로그인 사용자를 요청할 수 있기 때문에 비동기 수있다 좀 더 포괄적 인 가이드, 거기에 가서 : http://udinic.wordpress.com/2013/04/24/write-your-own-android-authenticator – Udinic

+0

@Udinic 어떻게 인증 토큰을 받기 위해 비동기로 가져올 수 있습니까? HTTP 요청의 param으로 넘겨 주시겠습니까? blockingGetAuthToken 호출을 사용하면 앱이 추락합니다. 모든 blockingGetAuthToken 호출에 대해 비동기 작업을 호출해야합니다 ?? http://paste.ubuntu.com/6245277/ 간단히 말해서 void getTokenForAccountCreateIfNeeded를 String으로 변경하지 못했습니다 getTokenForAccountCreateIfNeeded –

+0

@LOG_TAG이 문제를 이해할 수 없습니다. 왜 충돌하는거야? 오류 메시지는 무엇입니까? 지금까지 뭐 해봤 어? – Udinic