6

我的应用程序有 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。我怎么能解决这个?

4

3 回答 3

9

请参考android 中的 Tasks 和 Back stack。您可以在应用程序中使用两个任务 - 第一个任务是您开展业务,第二个任务是授权。您使用意图标志 FLAG_ACTIVITY_NEW_TASK 开始授权使用参数android:clearTaskOnLaunch。祝你好运!

于 2011-07-17T14:55:24.130 回答
1

我在 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);
于 2011-12-08T17:15:05.827 回答
0

在 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);
}
于 2011-07-17T14:49:01.357 回答