通过前面的介绍,我们成功获取了Access Token,但是在该过程中有个不好的地方:用户输入完QQ信息后,需要记录验证码,然后返回至Activity手动输入验证码,这将会使我们的程序显得非常不友好。我们能不能让程序自动获取到平台返回过来的验证码,而不需要用户手动收入呢?通过参考其它资料,找到了两种解决方法,本次和大家分享第一种解决方案。

在进行正题之前,我们先来做一个简单的实验。下面是我编写的一个简单的测试网页,其中包含两个链接,第一个链接比较容易理解,点击后跳转到百度,第二个链接如果在我们的PC浏览器点击肯定会提示找不到网页,但是放在Android系统中呢?下面我们来进行测试。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Untitled</title>
</head>
<style>
body
{font-size: 20px;font-weight: bold;color: #0000FF;
}
</style>
<body><a href="http://www.baidu.com">百度一下</a><br><br>
<a href="android://MainActivity?id=coolszy">启动Android</a></body>
</html>

创建一个Android项目,其中MainActivity界面如下:

同时“打开”按钮进行如下操作:

btnOpen=(Button)findViewById(R.id.btnOpen);
btnOpen.setOnClickListener(new OnClickListener()
{@Overridepublic void onClick(View v){//测试网页地址Uri uri = Uri.parse("http://192.168.1.100:8080/index.htm"); Intent intent = new Intent(Intent.ACTION_VIEW, uri);startActivity(intent);}
});

运行模拟器。点击“打开”按钮,点击“启动Android”链接并没有任何效果,在Logcat下输出如下错误信息:

 
 android://MainActivity?id=coolszy The protocol is not supported.
提示我们的android协议不支持。熟悉<intent-filter>的朋友应该知道 <action>, <category>,,和<data> 这几个元素,通过配置这几个元素我们可以隐性的启动Activity,在这里我们可以通过配置这三个元素让我们的浏览器支持android协议,在MainActivity的
<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

下再添加一个<intent-filter>:

<intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="android" android:host="MainActivity" />
</intent-filter>

添加完毕后当我们再次运行模拟器。点击“打开”按钮,点击“启动Android”链接后我们发现我们的又回到了MainActivity,注意我们是通过浏览器启动Activity。下面我们需要处理的就是获取请求的路径,也就是 android://MainActivity?id=coolszy。这时我们可以复写Activity种的onNewIntent()方法,不熟悉的朋友可以百度了解该方法。我们都知道Activity之间信息的传递时通过Intent对象,因此通过该方法中的Intent对象,我们可以获得请求的路径,最终获得请求的参数信息:

@Override
protected void onNewIntent(Intent intent)
{Uri uri = intent.getData();if (null!=uri){String url = uri.toString();Log.i(TAG, url);int index = url.lastIndexOf("=");if (index!=-1){etParams.setText(url.substring(index+1));}}super.onNewIntent(intent);
}

注:如果想让该方法执行,我们需修改AndroidManifest.xml文件中MainActivity的配置,添加android:lauchMode属性:

<activity android:name=".MainActivity"android:label="@string/app_name"android:launchMode="singleTask">

此时当我们再次运行模拟器。点击“打开”按钮,点击“启动Android”链接后我们发现我们的回到了MainActivity上,同时也得到了参数。

我们在总结下这个实验:这个实验的主要目的是学习如何从浏览器种启动一个Activity,首先我们要给相关的Activity添加一个<intent-filter>,其次通过复写onNewIntent()方法得到返回信息,如果想要被onNewIntent()调用,我们还行给其Activity添加一个android:lauchMode属性。

下面我们回归到本次主题,在OAuth认证第一步种有个oauth_callback参数,作用是认证成功后浏览器会被重定向到这个url中,如果我们url设置为http://www.baidu.com,则会定位到http://www.baidu.com,同样,如果我们把url设置为android://MainActivity,则会定位到android://MainActivity上,如果Activity再加上<intent-filter>,这时MainActivity就可以自动获取到验证码,而不需要我们手动的输入。

首先,设置我们的oauth_callback参数:

params.add(new Parameter("oauth_callback", encode("android://MainActivity")));

注:android://MainActivity之所以使用encode()是应为我在测试时发现当我们传递的url包含有“:”、“//”等符号会返回401错误,因此在这里进行encode()。

其次,修改AndroidManifest.xml文件中MainActivity配置:

<activity android:name=".MainActivity"android:label="@string/app_name"android:launchMode="singleTask"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="android" android:host="MainActivity" /> </intent-filter>
</activity>

同时给复写MainActivity的onNewIntent()方法,用于接收传递过来的参数信息:

@Overrideprotected void onNewIntent(Intent intent){super.onNewIntent(intent);Uri uri = intent.getData();String url = uri.toString();Log.i(TAG, url);int index = url.lastIndexOf("=");if (index!=-1){txtVerifier.setText(url.substring(index+1));}}

至此我们的程序就能自动的获取验证码,而不需要用户手动的输入。

课程下载地址:http://u.115.com/file/dn43kklr

文档下载地址:http://download.csdn.net/source/3430433

源码下载地址:http://u.115.com/file/aq2vc8m4

7.腾讯微博Android客户端开发——自动获取验证码(1)相关推荐

  1. 8.腾讯微博Android客户端开发——自动获取验证码(2)

    上一节给大家讲解通过调用android系统自带的浏览器进行授权认证的,使用该种方式能很容易的完成认证,但是该种方式有个弊端,也就是如果使用第三方的浏览器如UC.天天等,输入完QQ账号信息点击" ...

  2. 腾讯微博Android客户端开发——自动获取验证码

    上一节给大家讲解通过调用android系统自带的浏览器进行授权认证的,使用该种方式能很容易的完成认证,但是该种方式有个弊端,也就是如果使用第三方的浏览器如UC.天天等,输入完QQ账号信息点击" ...

  3. android 腾讯微博授权,5腾讯微博Android客户端开发获取请求用户授权Request Token.pdf...

    腾讯微博Android客户端开发 博客:/coolszy Android Android 腾讯微博AAnnddrrooiidd客户端开发 RequestToken RequestToken --获取请 ...

  4. 腾讯微博Android客户端开发——OAuth认证介绍

    腾讯微博是一个由腾讯推出,提供微型博客服务的类Twitter网站.在腾讯官方 的软件或网站中发布微博我们需要输入QQ号和密码,同样如果我们自己开发客户端给用户使用,我们也需要用户提供QQ号和密码,这就 ...

  5. 腾讯微博Android客户端开发 - OAuth1.0认证介绍

    2019独角兽企业重金招聘Python工程师标准>>> http://wiki.open.t.qq.com/index.php/OAuth%E6%8E%88%E6%9D%83%E8% ...

  6. 腾讯微博android版本,腾讯微博 Android版

    腾讯微博这是专为Android用户打造的腾讯微博手机客户端,让您随时随地与亿万微博用户分享生活和资讯.腾讯微博Android客户端,专为Android用户打造,让您随时随地与亿万微博用户分享生活和资讯 ...

  7. 行代码入门python_新浪微博Android客户端开发视频教程(36讲)

    教程名称:新浪微博Android客户端开发视频教程(36讲) 课程目录: [IT教程网]新浪微博Android客户端介绍 [IT教程网]新浪微博Android客户端相关资料 [IT教程网]新浪微博An ...

  8. 腾讯微博android版本,腾讯微博下载2017手机版下载-腾讯微博 安卓版v6.1.2-PC6安卓网...

    微博这东西小编就这么喜欢而已.不管是sina还是qq,丢不掉,逃不了.腾讯家的还不错.关联的朋友很多,总能在这里面找到熟悉的东西,QQ牵连的很强大 功能介绍 专为Android用户打造的腾讯微博手机客 ...

  9. 腾讯微博android版本,腾讯微博下载2021-腾讯微博app最新版本下载-腾讯微博下载安装...

    使用相关 腾讯微博怎么批量删除微博   批量删除方法 随着腾讯用户的增多,腾讯微博使用者的数量也逐渐增多,越来越多的人开始在微博中实时发布并记录自己的动态,或者进入微博关注自己感兴趣的发布者,由于腾讯 ...

最新文章

  1. 习题3-3 出租车计价 (15 分)
  2. 判断字符串_python判断字符串以什么开始
  3. 无线网卡的Master,Managed,ad-hoc,monitor等模式
  4. 前端学习(1300)报错:无法加载文件 D:\nodejs\node_global\webpack.ps1,因为在此系统上禁止运行脚本...
  5. 鞍部在哪里_智慧树知到在哪里可以寻找答案?
  6. c语言错误封装,C语言实现的封装,继承,多态
  7. 【干货】2021微信生态下的营销洞察.pdf(附下载链接)
  8. select count mysql_mysql select count 与 select count 两个执行效率怎样
  9. matlab与vrep联合仿真,MATALB与VREP联合仿真
  10. Taxi Cab Scheme 【HDU - 1350】【匈牙利算法解决最小链覆盖】
  11. 国内使用谷歌健身的方法
  12. 数据仓库:维度分析和指标
  13. matlab代码保密:pcode *.m
  14. Java题目集-Chapter 10 Object-Oriented Thinking
  15. 红米2联通4G版_标注:2014811_官方线刷包_救砖包_解账户锁
  16. java 监听器作用_浅谈java监听器的作用
  17. 无电子设备的课堂也可拥有完美反馈—Plickers+OneNote教学模式探索
  18. Google Earth Engine——GEE中无法实现的三个数据集此数据集提供了对热带地区高分辨率卫星监测的访问,主要目的是减少和扭转热带森林的损失,促进应对气候变化,保护生物多样性,促进森林再生
  19. qrc路径_qrc 资源文件供外部使用的方法
  20. 【调剂】江苏师范大学接收调剂研究生,计算化学 机器学习

热门文章

  1. web扫描器之Nessus
  2. TIKTOK海外直播公会如何申
  3. .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  4. 【工程师笔记】第六期:一项Xeon E5-2600 v4测试数据的背后
  5. Python(十三)IO编程
  6. calfcamel的2333(java)
  7. while(true) Thread.Sleep(XX)我通常是用这种写法,有没有更好的写法或者改进
  8. 暗黑破坏神3 夺魂之镰曝光“威斯特玛”城背景
  9. 在sweetalert弹出窗插件中加入html代码
  10. 易语言程序c盘路径,易语言取文件路径的操作教程