原文:http://blog.csdn.net/coolszy/article/details/6596053
通过前面的介绍,我们成功获取了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()
{
@Override
public 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下输出如下错误信息:
写道
<pre class="java" name="code"> android://MainActivity?id=coolszy The protocol is not supported.
写道
<span style="font-size:16px;">提示我们的<span style="font-family:Times New Roman;">android</span><span style="font-family:宋体;">协议不支持。熟悉</span><span style="font-family:Times New Roman;"><intent-filter></span><span style="font-family:宋体;">的朋友应该知道 </span><span style="font-family:Times New Roman;"><action>, <category>,</span><span style="font-family:宋体;">,和</span><span style="font-family:Times New Roman;"><data> </span><span style="font-family:宋体;">这几个元素,通过配置这几个元素我们可以隐性的启动</span><span style="font-family:Times New Roman;">Activity</span><span style="font-family:宋体;">,在这里我们可以通过配置这三个元素让我们的浏览器支持</span><span style="font-family:Times New Roman;">android</span><span style="font-family:宋体;">协议,在</span><span style="font-family:Times New Roman;">MainActivity</span><span style="font-family:宋体;">的</span></span>
<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()方法,用于接收传递过来的参数信息:
@Override
protected 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
分享到:
相关推荐
本文详细介绍了在腾讯微博Android客户端开发中如何实现OAuth 1.0a认证机制中的关键部分——请求签名的生成。通过对URL编码方法的特殊处理和HMAC-SHA1算法的具体实现,我们不仅能够确保请求的合法性和安全性,还能更...
《腾讯微博Android客户端开发详解》 在移动应用领域,Android平台因其开源、灵活的特性,吸引了众多开发者投身其中。本文将深入探讨“腾讯微博Android客户端开发”,解析其背后的技术架构和实现原理,帮助读者理解...
【腾讯微博Android客户端开发】是一门深入探讨如何构建Android平台上腾讯微博应用的课程,涵盖了从基础知识到高级技术的完整开发流程。这门课程旨在帮助开发者理解Android应用开发的基本原理,特别是针对社交媒体...
【腾讯微博Android客户端开发】是关于构建在Android平台上与腾讯微博接口交互的应用程序的过程。在这一过程中,重点涉及OAuth认证,这是一种确保用户信息安全并允许第三方应用访问受保护资源的授权协议。 OAuth认证...
【腾讯微博Android客户端开发】涉及的关键知识点主要集中在OAuth认证机制上,这是开发腾讯微博Android客户端时必须掌握的重要概念。OAuth是一种授权协议,旨在允许第三方应用在用户授权的情况下,安全地访问用户在...
腾讯微博Android客户端开发使用OAuth 1.0A版本进行用户授权,以确保用户在使用非官方客户端时,不会直接暴露QQ号和密码,降低安全风险。 OAuth的核心思想是通过令牌(Token)机制来实现授权,而不是直接使用用户名...
本示例主要探讨的是腾讯微博Android客户端OAuth认证流程,这对于任何想要集成腾讯微博服务到Android应用的开发者来说至关重要。 OAuth(开放授权)是一种授权机制,允许第三方应用在用户许可的情况下,安全地访问...
腾讯微博Android客户端开发——换取Access,课程下载地址:http://blog.csdn.net/coolszy。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
本文将围绕“Android源码——腾讯微博客户端源码.7z”这一主题,详细探讨其中的关键知识点,旨在帮助读者掌握Android开发中的核心技术和最佳实践。 首先,我们要了解Android应用的基本架构。一个标准的Android应用...
本文档是关于Android 腾讯微博客户端的设计与实现的毕业论文,论文主要介绍了 Android 腾讯微博客户端的开发过程,包括需求分析、系统设计、代码实现和功能测试等方面的内容。 在背景意义部分,论文首先介绍了腾讯...
在这个主题中,我们将专注于腾讯微博的Android客户端开发中的验证码自动化处理。腾讯微博是中国社交媒体巨头腾讯公司推出的一款服务,而Android作为全球最流行的移动操作系统,其客户端开发对于用户体验至关重要。 ...