Как отобразить действие для разрешения, которое начинается с уведомления в строке состояния? - PullRequest
4 голосов
/ 12 октября 2011

Я использую 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 отображает уведомление в строке состояния, которое запускает действие, запрашивающее разрешение на доступ к учетной записи.

Вопрос в том, как я могу отобразить это действие сразу, не нажимая на Уведомление?

Если у кого-то нет конкретной информации об этом, но есть полезные ссылки, пожалуйста, напишите.

Ответы [ 2 ]

5 голосов
/ 06 ноября 2011

Нашли решение здесь:

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 запрашивает разрешение во время выполнения

0 голосов
/ 23 июня 2015

Уведомление используется от службы в большинстве случаев.Если вы хотите немедленно показать активность, вы не можете сделать это из сервиса.Но нет никаких проблем, чтобы сразу показать эту активность, когда вы уже демонстрируете одно из действий вашего приложения прямо сейчас пользователю.И в этом случае никаких уведомлений не требуется, поэтому просто передайте «false» в качестве аргумента уведомления в getAuthToken () или вызовите метод без этого параметра в сигнатуре.Если вы хотите знать, в каком случае это действие точно отображается, ниже приведен один из них.

Просто этот экран появляется, когда AccountManager.getAuthToken () вызывается для доступа к учетной записи, созданной в другом приложении (с другой подписью).Чтобы показать это представление автоматически, просто передайте действие в AccountManager.getAuthToken () или запустите его с полученного KEY_INTENT, как это предлагается в ответе пользователя 979247.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...