新浪微博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();
- }
-
-
-
- }