Вернуться после вызова Intent.ACTION_VIEW в Android - PullRequest
5 голосов
/ 17 июля 2011

Мое приложение имеет 3 действия A, B, C. Занятие A вызывает B. В B я вызываю Intent.ACTION_VIEW, чтобы выполнить аутентификацию через Twitter, как показано ниже:

public static void DoAuthen(Context context, String CallBackUrl) throws OAuthMessageSignerException, OAuthNotAuthorizedException,
        OAuthExpectationFailedException, OAuthCommunicationException {
    httpOauthConsumer = new CommonsHttpOAuthConsumer(context.getString(R.string.Twitter_ConsumerKey), context
            .getString(R.string.Twitter_ConsumerSecret));
    httpOauthprovider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token", "http://twitter.com/oauth/access_token",
            "http://twitter.com/oauth/authorize");
    String authUrl = httpOauthprovider.retrieveRequestToken(httpOauthConsumer, CallBackUrl);
    context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
}

После аутентификации, мое приложениевызывается обратно при выполнении действия B. Здесь B вызывает C. Теперь, если я нажму кнопку «Назад», он перейдет в браузер (который раньше использовался для аутентификации в Twitter), а не в B и затем в A. Как я могу решить эту проблему?

Ответы [ 3 ]

8 голосов
/ 17 июля 2011

Пожалуйста, обратитесь к Задачи и стек Back в Android .Вы можете использовать две задачи в своем приложении - во-первых, вы занимаетесь бизнесом, во-вторых, авторизация.Вы начинаете авторизацию с пометкой FLAG_ACTIVITY_NEW_TASK и используете параметр android: clearTaskOnLaunch .Удачи!

1 голос
/ 08 декабря 2011

Я добавил следующие флаги в намерение ACTION_VIEW, и это решило проблему возврата к браузеру

consumer = new CommonsHttpOAuthConsumer(Constants.CONSUMER_KEY, Constants.CONSUMER_SECRET);
provider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
                    "http://twitter.com/oauth/access_token",
                    "http://twitter.com/oauth/authorize");
String authUrl = provider.retrieveRequestToken(consumer, Constants.OAUTH_CALLBACK_URL);
Intent oauthIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl));        
oauthIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
oauthIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
oauthIntent.addFlags(Intent.FLAG_FROM_BACKGROUND);
0 голосов
/ 17 июля 2011

В C вы можете отменить кнопку назад, чтобы перейти непосредственно к B

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        startActivity(C.this,B.class);
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
...