如何显示从状态栏通知开始的权限活动



我正在使用AccountManager获取OAuth 2.0令牌。

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在状态栏中显示一个通知,该通知启动一个请求访问帐户权限的活动。

问题是,我如何在不点击通知的情况下直接显示此活动?

找到解决方案:

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

这是代码的副本,以防页面消失:

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);  
}  

这个页面也很有用:

Google Account Authenticator在运行时请求权限

通知在大多数情况下是从服务中使用的。如果你想立即显示一个活动,你不能从服务中做到这一点。但当你已经向用户展示了应用的一个活动时,立即显示那个活动是没有问题的。在这种情况下不需要通知,所以只需将"false"作为通知参数传递给getAuthToken()或在签名中不带该参数的调用方法。如果你想知道,在什么情况下,活动是准确显示的,下面就是其中之一。

简单地说,当调用AccountManager.getAuthToken()来访问在另一个应用程序中创建的帐户(使用另一个签名)时,会出现此屏幕。要自动显示该视图,只需将一个活动传递给AccountManager.getAuthToken()或从接收到的KEY_INTENT启动它,如user979247的回复所建议的。

最新更新