来自OAuth的回调不会调用onResume()

时间:2011-09-17 17:29:11

标签: java android twitter oauth

我使用oauth-signpost作为我的OAuth库。当我将用户定向到授权页面时,用户登录并可以授权我的应用程序。当发生这种情况时,应用程序将返回焦点并启动onCreate()方法而不是onResume()方法。

我的代码如下:

private static final String             CONSUMER_KEY      = "---";
private static final String             CONSUMER_SECRET   = "---";

private static String                   ACCESS_KEY        = null;
private static String                   ACCESS_SECRET     = null;

private static final String             REQUEST_TOKEN_URL = "https://api.twitter.com/oauth/request_token";
private static final String             ACCESS_TOKEN_URL  = "https://api.twitter.com/oauth/access_token";
private static final String             AUTH_URL          = "https://api.twitter.com/oauth/authorize";
private static final String             CALLBACK_URL      = "myApp://Tweets";

private static CommonsHttpOAuthConsumer consumer          = new CommonsHttpOAuthConsumer(CONSUMER_KEY,CONSUMER_SECRET);

private static CommonsHttpOAuthProvider provider          = new CommonsHttpOAuthProvider(REQUEST_TOKEN_URL,ACCESS_TOKEN_URL,AUTH_URL);


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    String authUrl = null;
    try {
        authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
    } catch(OAuthMessageSignerException e) {
        e.printStackTrace();
    } catch(OAuthNotAuthorizedException e) {
        e.printStackTrace();
    } catch(OAuthExpectationFailedException e) {
        e.printStackTrace();
    } catch(OAuthCommunicationException e) {
        e.printStackTrace();
    }
    Log.d("OAuthTwitter", "authUrl" + authUrl);

    WebView webview = new WebView(this);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.setVisibility(View.VISIBLE);
    setContentView(webview);
    webview.loadUrl(authUrl);

}

    @Override
public void onResume() {
    super.onResume();
    Uri uri = this.getIntent().getData();

    if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
        Log.d("OAuthTwitter", uri.toString());
        String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
        Log.d("OAuthTwitter", verifier);
        try {

            provider.retrieveAccessToken(consumer, verifier);
            ACCESS_KEY = consumer.getToken();
            ACCESS_SECRET = consumer.getTokenSecret();

            Log.d("OAuthTwitter", ACCESS_KEY);
            Log.d("OAuthTwitter", ACCESS_SECRET);

        } catch (OAuthMessageSignerException e) {
            e.printStackTrace();
        } catch (OAuthNotAuthorizedException e) {
            e.printStackTrace();
        } catch (OAuthExpectationFailedException e) {
            e.printStackTrace();
        } catch (OAuthCommunicationException e) {
            e.printStackTrace();
        }
    }

的Manifest.xml

    <application
    android:icon="@drawable/icon"
    android:label="@string/app_name">
    <activity
        android:name=".Tweets"
        android:label="@string/app_name">
        <intent-filter>
            <action
                android:name="android.intent.action.MAIN" />
            <category
                android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action
                android:name="android.intent.action.VIEW" />
            <category
                android:name="android.intent.category.DEFAULT" />
            <category
                android:name="android.intent.category.BROWSABLE" />
            <data
                android:scheme="myApp"
                android:host="Tweets" />

        </intent-filter>

    </activity>

如何让我的应用程序调用onResume(),以便我可以继续执行OAuth流程?

1 个答案:

答案 0 :(得分:1)

在这种情况下,请尝试将您的活动启动模式设置为singleTask

有关详细信息,请参阅该链接:http://developer.android.com/guide/topics/manifest/activity-element.html#lmode