新浪微博Android客户端开发视频中OAuth认证要使用WebView作为嵌入浏览器进行OAuth认证,所以现在我也把代码贴出来一下 首先是布局文件,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> 复制代码 布局文件比较简单,就一个WebView 控件。 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(); } } 分