Android实现授权访问网页的方法

本文实例讲述了Android授权访问网页的实现方法,即使用Webview显示OAuth Version 2.a ImplicitGrant方式授权的页,但是对于移动终端不建议使用Authorize code grant方式授权

具体功能代码如下所示:

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.http.SslError;
import android.os.Bundle;
import android.util.Log;
import android.webkit.SslErrorHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.tencent.weibo.oauthv2.OAuthV2;
import com.tencent.weibo.oauthv2.OAuthV2Client;
/**
 * 使用Webview显示OAuth Version 2.a ImplicitGrant方式授权的页
 * (移动终端不建议使用Authorize code grant方式授权
 * 本类使用方法
 * 调用本类的地方请添加如下代码
 * //请将OAuthV2Activity改为类的类名
 * Intent intent = new Intent(OAuthV2Activity.this, OAuthV2AuthorizeWebView.class);
 * intent.putExtra("oauth", oAuth); //oAuth为OAuthV2类的实例,存放授权相关信??
 * startActivityForResult(intent, myRrequestCode); //请设置合适的requsetCode
 * 重写接收回调信息的方
 * if (requestCode==myRrequestCode) { //对应之前设置的的myRequsetCode
 *   if (resultCode==OAuthV2AuthorizeWebView.RESULT_CODE) {
 *     //取得返回的OAuthV2类实例oAuth
 *     oAuth=(OAuthV2) data.getExtras().getSerializable("oauth");
 *   }
 * }
 * @see android.app.Activity#onActivityResult(int requestCode, int resultCode, Intent data)
 */
public class MyWebView extends Activity {
  public final static int RESULT_CODE = 2;
  private OAuthV2 oAuth;
  private final String TAG = "MyWebView";
 private WebView mWebView;
  @SuppressLint("NewApi")
 @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webview_qq);
    mWebView = (WebView) findViewById(R.id.qq_mywebview);;
    mWebView.setVerticalScrollBarEnabled(false);
 mWebView.setHorizontalScrollBarEnabled(false);
 Intent intent = this.getIntent();
    oAuth = (OAuthV2) intent.getExtras().getSerializable("oauth");
    String urlStr = OAuthV2Client.generateImplicitGrantUrl(oAuth);
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setSupportZoom(true);
    mWebView.requestFocus();
    mWebView.loadUrl(urlStr);
    System.out.println(urlStr.toString());
    Log.i(TAG, "WebView Starting....");
    WebViewClient client = new WebViewClient() {
    /* 回调方法,当页面加载时执行*/
      @Override
      public void onPageStarted(WebView view, String url, Bitmap favicon) {
        Log.i(TAG, "WebView onPageStarted...");
        Log.i(TAG, "URL = " + url);
        if (url.indexOf("access_token=") != -1) {
          int start=url.indexOf("access_token=");
          String responseData=url.substring(start);
          OAuthV2Client.parseAccessTokenAndOpenId(responseData, oAuth);
          Intent intent = new Intent();
          intent.putExtra("oauth", oAuth);
          setResult(RESULT_CODE, intent);
          finish();
        }
        super.onPageStarted(view, url, favicon);
        Log.i(TAG, "999999999");
      }
      /* TODO Android2.2及以上版本才能使用该方法,目前https://open.t.qq.com中存在http资源会引起sslerror,待网站修正后可去掉该方*/
 public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        if ((null != view.getUrl()) && (view.getUrl().startsWith("https://open.t.qq.com"))) {
          handler.proceed();// 接受证书
        } else {
          handler.cancel(); // 默认的处理方式,WebView变成空白
        }
        // handleMessage(Message msg); 其他处理
      }
    };
    mWebView.setWebViewClient(client);
  }
}
(0)

相关推荐

  • Android Webview添加网页加载进度条实例详解

    推荐阅读:Android WebView线性进度条实例详解 最近在android项目中使用webview嵌套了一个抽奖活动网页,活动上线,运行良好(改了N次需求和突发bug),还好这种模式的活动,只需要修改网页,不需要重新打包发布市场,这也是这种模式开发的优势之一.后来据产品哥反馈说加载网页无进度提示,好吧,这个当时真没考虑这么多,这个要加加..想当然以为轻松搞定之....其实还是比轻松要复杂点... 1.首先自定义一个WebView控件 /** * 带进度条的Webivew * @author

  • Android编程实现网络图片查看器和网页源码查看器实例

    本文实例讲述了Android编程实现网络图片查看器和网页源码查看器.分享给大家供大家参考,具体如下: 网络图片查看器 清单文加入网络访问权限: <!-- 访问internet权限 --> <uses-permission android:name="android.permission.INTERNET"/> 界面如下: 示例: public class MainActivity extends Activity { private EditText image

  • android 封装抓取网页信息的实例代码

    复制代码 代码如下: package cn.mypic; import java.io.BufferedInputStream;      import java.io.BufferedReader;      import java.io.File;      import java.io.FileNotFoundException;      import java.io.FileOutputStream;      import java.io.IOException;      impo

  • 通过Html网页调用本地安卓(android)app程序代码

    一.通过html页面打开Android本地的app 1.首先在编写一个简单的html页面 复制代码 代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a h

  • Android中实现地址栏输入网址能浏览该地址网页源码并操作访问网络

     首先实现简单布局: 复制代码 代码如下: <EditText android:id="@+id/et_url" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true&q

  • Android下保存简单网页到本地(包括简单图片链接转换)实现代码

    最近在做一个项目涉及到将包含图片的简单网页下载到本地,方便离线时观看,在这里分享一下,大家做下简单修改就可以用到自己的项目中了.(这里用到了AQuery库) 复制代码 代码如下: package com.nekocode.xuedao.utils; import java.io.File;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.regex.Matcher;import java.uti

  • Android使用WebView.loadUri()打开网页的方法

    本文实例讲述了Android使用WebView.loadUri()打开网页的方法.分享给大家供大家参考,具体如下: 程序如下所示: import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.webkit.WebView; import android.widget.EditText

  • Android 自定义标题栏 显示网页加载进度的方法实例

    这阵子在做Lephone的适配,测试组提交一个bug:标题栏的文字较长时没有显示完全,其实这并不能算个bug,并且这个问题在以前其他机器也没有出现,只是说在Lephone的这个平台上显示得不怎么美观,因为联想将原生的标题栏UI进行了修改.修改的过程中遇到了一个难题,系统自带的那个标题栏进度总能够到达100%后渐退,但是我每次最后到100%那一段显示不全,尝试了用线程程序死了卡主了不说,还是一样的效果,后来同事一句话提醒了我用动画.确实是这样我猜系统的也是这样实现的,等进度到达100%后,用动画改

  • Android中访问证书有问题的SSL网页的方法

    PC上的浏览器会弹出证书错误的对话框,提示你是否要无视错误继续浏览.实际上在WebView里也可以这样做,以实现加载证书有问题的页面. 复制代码 代码如下: WebView webview = (WebView) findViewById(R.id.webview);webview.setWebViewClient(new WebViewClient() {    @Override    public void onReceivedSslError(WebView view, SslError

  • Android中获取网页表单中的数据实现思路及代码

    MainActivity如下: 复制代码 代码如下: package cn.testjavascript; import java.util.StringTokenizer; import android.os.Bundle; import android.webkit.WebView; import android.app.Activity; /** * Demo描述: * 在Android中获取网页里表单中的数据 */ public class MainActivity extends Ac

  • Android中Webview打开网页的同时发送HTTP头信息方法

    众所周知,当你点击一个超链接进行跳转时,WebView会自动将当前地址作为Referer(引荐)发给服务器,因此很多服务器端程序通过是否包含referer来控制盗链,所以有些时候,直接输入一个网络地址,可能有问题,那么怎么解决盗链控制问题呢,其实在webview加载时加入一个referer就可以了,如何添加呢? 从Android 2.2 (也就是API 8)开始,WebView新增加了一个接口方法,就是为了便于我们加载网页时又想发送其他的HTTP头信息的. 复制代码 代码如下: public v

随机推荐