4

OAuth2.0トークンを取得するためにAccountManagerを使用しています。

mAccountManager.getAuthToken(mAccount, AUTH_TOKEN_TYPE, true, new AccountManagerCallback<Bundle>() {
        @Override
        public void run(AccountManagerFuture<Bundle> future) {
                Bundle bundle = future.getResult();
                if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) {
                    String authToken = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
                    ... continue
                }
            }
        }
    }, null);

トークンを初めて取得する場合、AccountManagerはステータスバーに通知を表示します。ステータスバーは、アカウントへのアクセス許可を要求するアクティビティを開始します。

問題は、通知をクリックせずにこのアクティビティをすぐに表示するにはどうすればよいですか?

4

2 に答える 2

5

Found the solution here:

http://www.finalconcept.com.au/article/view/android-account-manager-using-other-accounts

Here's a copy of the code in case that page goes away:

private final Handler handler = new Handler();  

/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {  
    final AccountManager accMgr;  
    final Account[] accounts;  
    final Account account;  
    final AccountManagerFuture<Bundle> amf;  
    final MainActivity cbt = this;  
    String authTokenType;  

    super.onCreate(savedInstanceState);  

    this.setContentView(R.layout.main);  

    accMgr = AccountManager.get(this);  
    authTokenType = "com.google";  
    accounts = accMgr.getAccountsByType(authTokenType);  
    account = accounts[2];  

    amf = accMgr.getAuthToken(account, authTokenType, true,  
            new AccountManagerCallback<Bundle>() {  

                @Override  
                public void run(AccountManagerFuture<Bundle> arg0) {  

                    try {  
                        Bundle result;  
                        Intent i;  
                        String token;  

                        result = arg0.getResult();  
                        if (result.containsKey(AccountManager.KEY_INTENT)) {  
                            i = (Intent)result.get(AccountManager.KEY_INTENT);  
                            if (i.toString().contains("GrantCredentialsPermissionActivity")) {  
                                // Will have to wait for the user to accept  
                                // the request therefore this will have to  
                                // run in a foreground application  
                                cbt.startActivity(i);  
                            } else {  
                                cbt.startActivity(i);  
                            }  

                        } else {  
                            token = (String)result.get(AccountManager.KEY_AUTHTOKEN);  

                            /* 
                             * work with token 
                             */  

                            // Remember to invalidate the token if the web service rejects it  
                            // if(response.isTokenInvalid()){  
                            //    accMgr.invalidateAuthToken(authTokenType, token);  
                            // }  

                        }  
                    } catch (OperationCanceledException e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    } catch (AuthenticatorException e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    } catch (IOException e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    }  

                }  
            }, handler);  

}  

This page was also useful:

Google Account Authenticator asks for permission at run-time

于 2011-11-06T17:57:45.413 に答える
0

ほとんどの場合、通知はサービスから使用されます。アクティビティをすぐに表示したい場合は、サービスからそれを行うことはできません。ただし、アプリのアクティビティの 1 つを既にユーザーに表示している場合は、そのアクティビティをすぐに表示しても問題ありません。このような場合、通知は必要ないため、通知引数として "false" を getAuthToken() に渡すか、署名にそのパラメーターを指定せずにメソッドを呼び出します。どのような場合にそのアクティビティが正確に表示されるかを知りたい場合は、以下がその 1 つです。

簡単に言えば、別のアプリで作成された (別の署名を持つ) アカウントにアクセスするために AccountManager.getAuthToken() が呼び出されると、この画面が表示されます。そのビューを自動的に表示するには、user979247 の返信で提案されているように、アクティビティを AccountManager.getAuthToken() に渡すか、受信した KEY_INTENT から開始します。

于 2015-06-23T12:56:12.670 に答える