我想使用Twitter4J连接到Twitter。 MainActivity
致电TwitterLoginActivity
。 TwitterLoginActivity显示WebView,然后通过OnNewIntent()获取accessToken。问题是在我“登录”Twitter之后,WebView显示“网页不可用”。这是我的代码。
MainActivity调用TwitterLoginActivity:
final Intent intent = new Intent(MainActivity.this, TwitterLoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivityForResult(intent, Constant.LOGIN_REQUEST);
TwitterLoginActivity显示了一个WebView。
final WebView twitterSite = new WebView(this);
final ViewGroup viewGroup = (ViewGroup)findViewById(R.id.twitterLoginRoot);
viewGroup.addView(twitterSite);
// Open keyboard when focusing on Twitter login form.
twitterSite.requestFocus(View.FOCUS_DOWN);
twitterSite.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View v, final MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});
twitterSite.setWebViewClient(new CustomWebViewClient());
try {
final RequestToken requestToken = twitter.getOAuthRequestToken(Constant.CALLBACK_URL);
twitterSite.loadUrl(requestToken.getAuthenticationURL());
} catch (final TwitterException e) {
e.printStackTrace();
}
onNewIntent:
@Override
protected void onNewIntent(final Intent intent) {
super.onNewIntent(intent);
System.out.println("HIEU=================================");
setResult(RESULT_OK);
finish();
}
我用它来阻止默认的浏览器加载。
private class CustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
view.loadUrl(url);
return true;
}
}
清单文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.twitterapitest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<uses-permission
android:name="android.permission.INTERNET" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".TwitterLoginActivity"
android:label="@string/title_activity_main"
android:launchMode="singleInstance">
<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="test123"/>
</intent-filter>
</activity>
</application>
</manifest>
回调URI:
public static final String CALLBACK_URL = "test123:///";
答案 0 :(得分:2)
我想你想要在你的登录成功时返回twitter的“oauth_verifier”,对吗?
您可以从返回shouldOverrideUrlLoading方法的url获取它。做这样的事情:
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
progressDialog.show();
}
@Override
public void onPageFinished(WebView view, final String url) {
progressDialog.dismiss();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String oauthVerifier = url.substring(url.indexOf("oauth_verifier=") + 15);
Intent intent = new Intent(context);
Bundle bundle = new Bundle();
bundle.putString("oauth_verifier", oauthVerifier);
intent.putExtras(bundle);
((Activity) ctx).setResult(RESULT_OK, intent);
return true;
}
});
我遇到了与你类似的问题。我不知道如何将onNewIntent调用到WebViewClient中,所以我不得不重新考虑真正需要的东西,在我的结论中,我意识到我只需要oauth_verifier,我可以从返回的URL中获取它。
我希望这可以帮到你:
答案 1 :(得分:0)
使用以下网址作为回调网址,它将解决您的问题。
public static final String CALLBACK_URL = "x-oauthflow-twitter://callback";