WebView作为嵌入浏览器进行OAuth1.0认证

来源:互联网 发布:电脑数据流量统计 编辑:程序博客网 时间:2024/06/01 07:31
新浪微博Android客户端开发视频中OAuth认证要使用WebView作为嵌入浏览器进行OAuth认证,所以现在我也把代码贴出来一下

首先是布局文件,webview.xml:
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:orientation="vertical"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. >

  6. <WebView android:layout_width="fill_parent"
  7. android:layout_height="fill_parent"
  8. android:id="@+id/wbView"/>

  9. </LinearLayout>
复制代码
布局文件比较简单,就一个WebView 控件。

Activity:
  1. package com.iweibo;

  2. import com.iweibo.oauth.MyOAuth;
  3. import com.iweibo.util.JavascriptInterface;
  4. import android.app.Activity;
  5. import android.app.ProgressDialog;
  6. import android.content.Intent;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.webkit.WebChromeClient;
  10. import android.webkit.WebView;
  11. import android.webkit.WebViewClient;
  12. import android.widget.Toast;



  13. /**

  14. * @author touch Android
  15. * @version 1.0
  16. * http://bbs.droidstouch.com
  17. */
  18. public class WebViewActivity extends Activity {




  19. private WebView wbView;
  20. private String url=null;
  21. private Handler handler;
  22. private ProgressDialog pd;


  23. public void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.webview);

  26. url= MyOAuth.getAuthenticationURL();

  27. System.out.println("url" +url);

  28. if(null==url)
  29. {
  30. Toast.makeText(this, "授权地址为空", 3000).show();
  31. return ;
  32. }
  33. init();

  34. loadUrl(wbView, url);

  35. handler = new Handler()
  36. {
  37. public void handleMessage(android.os.Message msg)
  38. {
  39. switch(msg.what)
  40. {
  41. case 0:
  42. pd.show();
  43. break;

  44. case 1:
  45. pd.dismiss();
  46. break; 
  47. }
  48. };
  49. };
  50. }



  51. private void init()
  52. {

  53. wbView = (WebView) this.findViewById(R.id.wbView);

  54. //设置可用Javascript脚本
  55. wbView.getSettings().setJavaScriptEnabled(true);
  56. wbView.setScrollBarStyle(0);//滚动条风格,为0就是不给滚动条留空间,滚动条覆盖在网页上 


  57. wbView.addJavascriptInterface(new JavascriptInterface(), "Methods");

  58. wbView.setWebViewClient(new WebViewClient()
  59. {
  60. public boolean shouldOverrideUrlLoading(WebView view, String url)
  61. {
  62. loadUrl(view, url);
  63. return true;
  64. }

  65. @Override
  66. public void onPageFinished(WebView view, String url)
  67. {
  68. if(url.equals("http://api.t.sina.com.cn/oauth/authorize"))
  69. {
  70. view.loadUrl("javascript:window.Methods.getPin('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");

  71. Intent intent = new Intent(WebViewActivity.this, AccessTokenActivity.class);
  72. startActivity(intent);

  73. }

  74. super.onPageFinished(view, url);
  75. }

  76. });



  77. wbView.setWebChromeClient(new WebChromeClient(){
  78. public void onProgressChanged(WebView view, int newProgress)
  79. {

  80. if(newProgress == 100)// 全部加载完毕
  81. {
  82. handler.sendEmptyMessage(1);
  83. }
  84. super.onProgressChanged(view, newProgress);
  85. }
  86. });


  87. pd = new ProgressDialog(this);
  88. pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
  89. pd.setMessage("正在载入");
  90. }


  91. private void loadUrl(final WebView view,final String url)
  92. {
  93. new Thread()
  94. {

  95. public void run() {

  96. handler.sendEmptyMessage(0);
  97. view.loadUrl(url);
  98. };
  99. }.start();
  100. }



  101. }
复制代码

原创粉丝点击