Android 从网页中跳转到APP

最近,在使用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,用来接收外部的跳转。代码如下:

[java]  view plain  copy
  1. public class JumpActivity extends Activity{  
  2.   
  3.   
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         // TODO Auto-generated method stub  
  7.         super.onCreate(savedInstanceState);  
  8.         Intent intent = getIntent();  
  9.           
  10.         String data = intent.getDataString();  
  11.         System.out.println(data);  
  12.     }  
  13.       
  14. }  

在这个Activity里,我们可以通过getIntent(),来获取外部跳转传过来的信息。

2.  修改ManiFest文件,设置Activity的接收Action的属性,代码如下:

[java]  view plain  copy
  1. <activity android:name=".JumpActivity" >  
  2.     <intent-filter>  
  3.         <action android:name="android.intent.action.VIEW" />  
  4.   
  5.   
  6.         <category android:name="android.intent.category.DEFAULT" />  
  7.         <category android:name="android.intent.category.BROWSABLE" />  
  8.   
  9.   
  10.         <data  
  11.             android:host="data"  
  12.             android:scheme="sharetest" />  
  13.     </intent-filter>  
  14. </activity>  

如上所示,在data里设置了 scheme和host,则该Activity可以接收和处理类似于 "sharetest://data/XXX"的链接。

3. 接下来我们可以写一个测试工程B,看看工程A中的JumpActivity是否可以接收和处理类似于 "sharetest://data/XXX"的链接。因此,新建一个工程B,工程里只有一个WebView,用来打开一个本地的网页。由于WebView在接收到自己不能处理的Uri时,会自动的调用发送Intent来调用能够处理该Uri的应用。

以下是网页的代码:

[html]  view plain  copy
  1. <!DOCTYPE html>  
  2. <html>  
  3. <body>  
  4. <iframe src="sharetest://data/123" style="display:none"></iframe>  
  5. </body>  
  6. </html>  
将该网页放到Assets目录下,在代码里调用Webview加载该Html文件,代码如下:

[java]  view plain  copy
  1. public void loadHtml()  
  2. {  
  3.     WebView webview = new WebView(this);   
  4.     WebSettings wSet = webview.getSettings();   
  5.     wSet.setJavaScriptEnabled(true);  
  6.     webview.loadUrl("file:///android_asset/a.html");    
  7.     setContentView(webview);  
  8. }  

4. 将手机装上工程A和工程B。打开工程A,可以发现:工程B的JumpActivity会自动被打开。如下图所示:在Intent中可以去到网页里发出的链接:sharetest://data/123。

因此,我们就可以在JumpActivity里处理接收到的消息了。


通过以上的4步,相信大家都了解如何让应用接收和处理某种Uri消息。因此,只要我们

1. 在ManiFest里为Activity申明接收并处理某种Uri

2. 在页面中添加以下代码:其中,l为符合Activity处理规则的Uri地址。

[java]  view plain  copy
  1. <iframe src="l" style="display:none"></iframe>  
就可以让已安装该应用的用户在打开该网页的时候,自动的跳转到应用内部。

点击微信和QQ分享跳转到程序内部的原理与此一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值