Вернуться после вызова Intent.ACTION_VIEW в Android

В моем приложении есть 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. Как я могу решить это?


person Nguyen Minh Binh    schedule 17.07.2011    source источник
comment
если B звонит C, он должен вернуться к B после повторного нажатия на C .. странно знать .. я также попытаюсь воспроизвести это   -  person Rohit Sharma    schedule 17.07.2011
comment
Да, верно. Но в случае, если B вызывает Intent.ACTION_VIEW (для запроса страницы Twitter) перед вызовом C, он не возвращается к B непосредственно из C.   -  person Nguyen Minh Binh    schedule 17.07.2011
comment
То, что вы пишете в своих комментариях, заключается в том, что ваша активность аутентификации возвращается к b, а затем b вызывает c.. это означает, что активность аутентификации должна быть завершена.   -  person Rohit Sharma    schedule 17.07.2011
comment
@Griggry Комментарий правильный, пожалуйста, следуйте этому   -  person Rohit Sharma    schedule 17.07.2011


Ответы (3)


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

person Gregory Kalabin    schedule 17.07.2011
comment
Спасибо, Григорий. Не могли бы вы дать мне несколько примеров кодов? Я могу установить флаг FLAG_ACTIVITY_NEW_TASK, когда я вызываю Intent.ACTION_VIEW, но я не знаю, как использовать с этим параметр android:clearTaskOnLaunch. - person Nguyen Minh Binh; 17.07.2011
comment
@nguyen-minh-binh попробуйте прочитать это: intridea .com/2011/6/16/ - person Gregory Kalabin; 17.07.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);
person kitwalker    schedule 08.12.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);
}
person Rasel    schedule 17.07.2011
comment
Я пробовал этот способ раньше. Оно работает. Но когда я нажимаю кнопку «Домой», чтобы свернуть свое приложение, а затем нажимаю и удерживаю кнопку «Домой», чтобы снова открыть мое приложение, я покажу активность B вместо A. - person Nguyen Minh Binh; 17.07.2011