Android WebView 实例

本文介绍了一个具体的实现方案,用于在新浪微博Android客户端通过WebView进行OAuth认证流程。文章详细展示了如何设置WebView来加载授权页面,并监听认证过程中的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新浪微博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. *
  15. * @author touch Android
  16. * @version 1.0
  17. * http://bbs.droidstouch.com
  18. */
  19. public class WebViewActivity extends Activity {




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


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

  27. url= MyOAuth.getAuthenticationURL();

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

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

  35. loadUrl(wbView, url);

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

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



  52. private void init()
  53. {

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

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


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

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

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

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

  74. }

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

  77. });



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

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


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


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

  96. public void run() {

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



  102. }




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值