新浪微博Android客户端开发视频中OAuth认证要使用WebView作为嵌入浏览器进行OAuth认证,所以现在我也把代码贴出来一下
首先是布局文件,webview.xml:
复制代码
布局文件比较简单,就一个WebView 控件。
Activity:
复制代码
首先是布局文件,webview.xml:
-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
android:orientation="vertical"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
>
-
-
<WebView android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
android:id="@+id/wbView"/>
-
- </LinearLayout>
Activity:
-
package com.iweibo;
-
-
import com.iweibo.oauth.MyOAuth;
-
import com.iweibo.util.JavascriptInterface;
-
import android.app.Activity;
-
import android.app.ProgressDialog;
-
import android.content.Intent;
-
import android.os.Bundle;
-
import android.os.Handler;
-
import android.webkit.WebChromeClient;
-
import android.webkit.WebView;
-
import android.webkit.WebViewClient;
-
import android.widget.Toast;
-
-
-
-
/**
-
*
-
* @author touch Android
-
* @version 1.0
-
* http://bbs.droidstouch.com
-
*/
-
public class WebViewActivity extends Activity {
-
-
-
-
-
private WebView wbView;
-
private String url=null;
-
private Handler handler;
-
private ProgressDialog pd;
-
-
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.webview);
-
-
url= MyOAuth.getAuthenticationURL();
-
-
System.out.println("url" +url);
-
-
if(null==url)
-
{
-
Toast.makeText(this, "授权地址为空", 3000).show();
-
return ;
-
}
-
init();
-
-
loadUrl(wbView, url);
-
-
handler = new Handler()
-
{
-
public void handleMessage(android.os.Message msg)
-
{
-
switch(msg.what)
-
{
-
case 0:
-
pd.show();
-
break;
-
-
case 1:
-
pd.dismiss();
-
break;
-
}
-
};
-
};
-
}
-
-
-
-
private void init()
-
{
-
-
wbView = (WebView) this.findViewById(R.id.wbView);
-
-
//设置可用Javascript脚本
-
wbView.getSettings().setJavaScriptEnabled(true);
-
wbView.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上
-
-
-
wbView.addJavascriptInterface(new JavascriptInterface(), "Methods");
-
-
wbView.setWebViewClient(new WebViewClient()
-
{
-
public boolean shouldOverrideUrlLoading(WebView view, String url)
-
{
-
loadUrl(view, url);
-
return true;
-
}
-
-
@Override
-
public void onPageFinished(WebView view, String url)
-
{
-
if(url.equals("http://api.t.sina.com.cn/oauth/authorize"))
-
{
-
view.loadUrl("javascript:window.Methods.getPin('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");
-
-
Intent intent = new Intent(WebViewActivity.this, AccessTokenActivity.class);
-
startActivity(intent);
-
-
}
-
-
super.onPageFinished(view, url);
-
}
-
-
});
-
-
-
-
wbView.setWebChromeClient(new WebChromeClient(){
-
public void onProgressChanged(WebView view, int newProgress)
-
{
-
-
if(newProgress == 100)// 全部加载完毕
-
{
-
handler.sendEmptyMessage(1);
-
}
-
super.onProgressChanged(view, newProgress);
-
}
-
});
-
-
-
pd = new ProgressDialog(this);
-
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
-
pd.setMessage("正在载入");
-
}
-
-
-
private void loadUrl(final WebView view,final String url)
-
{
-
new Thread()
-
{
-
-
public void run() {
-
-
handler.sendEmptyMessage(0);
-
view.loadUrl(url);
-
};
-
}.start();
-
}
-
-
-
- }