最近,在使用QQ和微信等SDK来实现分享网页的时候,发现,SDK已经为页面跳转回应用提供了基本的数据支持。我们只需在应用里和被分享的网页进行简单的设置,即可实现此功能。
那么我们先来看下网页跳转回应用的实现原理。
就Android平台而言,URI主要分三个部分:scheme, authority and path。其中authority又分为host和port。格式如下:
scheme://host:port/path
举个实际的例子:
content://com.example.project:200/folder/subfolder/etc
\---------/ \---------------------------/ \---/ \--------------------------/
scheme host port path
\--------------------------------/
authority
现在大家应该知道data flag中那些属性的含义了吧,看下data flag
<data android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string" />
以下是测试示例的实现步骤:
1. 新建一个工程A,并实现一个Activity,用来接收外部的跳转。代码如下:
public class JumpActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); Intent intent = getIntent(); String data = intent.getDataString(); System.out.println(data); } }
在这个Activity里,我们可以通过getIntent(),来获取外部跳转传过来的信息。
2. 修改ManiFest文件,设置Activity的接收Action的属性,代码如下:
<activity android:name=".JumpActivity" > <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="sharetest" android:host="data" /> </intent-filter> </activity>
如上所示,在data里设置了 scheme和host,则该Activity可以接收和处理类似于 "sharetest://data/XXX"的链接。
3. 接下来我们可以写一个网页的代码,由于浏览器在接收到自己不能处理的Uri时,会自动的调用发送Intent来调用能够处理该Uri的应用。
以下是网页的代码:
<!DOCTYPE html> <html> <body> <iframe src="sharetest://data/123" style="display:none"></iframe> </body> </html>
4. 在手机浏览器里访问此页面,可以发现:JumpActivity会自动被打开。如下图所示:在Intent中可以去到网页里发出的链接:sharetest://data/123。
通过以上的4步,相信大家都了解如何让应用接收和处理某种Uri消息。因此,只要我们
1. 在ManiFest里为Activity申明接收并处理某种Uri
2. 在页面中添加以下代码:其中,l为符合Activity处理规则的Uri地址。
<iframe src="l" style="display:none"></iframe>
就可以让已安装该应用的用户在打开该网页的时候,自动的跳转到应用内部。