通过Html网页调用本地安卓app

我们在做一些分享等功能的时候常常需要用到网页跳转app的功能,那么要如何实现这一功能呢?

首先我们先来看下网页跳转回应用的实现原理。

URI详解

就Android平台而言,URI主要分三个部分:scheme, authority and path。其中authority又分为host和port。格式如下:

scheme://host:port/path 

举个实际的例子:

这里写图片描述

现在大家应该知道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" /> 

实现步骤

接收跳转信息

新建一个工程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 scheme = intent.getScheme();  
        Uri uri = intent.getData();  
        System.out.println("scheme        --> "+scheme);  
        if (uri != null) { 

            String host        = uri.getHost();  
            String dataString  = intent.getDataString();  
            String id          = uri.getQueryParameter("d");  
            String path        = uri.getPath();  
            String path1       = uri.getEncodedPath();  
            String queryString = uri.getQuery(); 

            System.out.println("host        --> "+host);  
            System.out.println("dataString  --> "+dataString);  
            System.out.println("id          --> "+id);  
            System.out.println("path        --> "+path);  
            System.out.println("path1       --> "+path1);  
            System.out.println("queryString --> "+queryString);  
        } 
        String data = intent.getDataString();     
        System.out.println(data);  
    }       
}  

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

添加过滤器

修改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:host="aa.bb"  
            android:scheme="lhc" />  
    </intent-filter>  
</activity> 

如上所示,在data里设置了 scheme和host,则该Activity可以接收和处理类似于

lhc://aa.bb/XXX

的链接。

设置跳转源

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

以下是网页的代码:

<!DOCTYPE html>  
<html>  
<body>  
<iframe src="lhc://aa.bb:80/test?p=12&d=1" style="display:none"></iframe>  
</body>  
</html> 

将该网页放到Assets目录下,在代码里调用Webview加载该Html文件,代码如下:

public void loadHtml()  
{  
    WebView webview = new WebView(this);   
    WebSettings wSet = webview.getSettings();   
    wSet.setJavaScriptEnabled(true);  
    webview.loadUrl("file:///android_asset/a.html");    
    setContentView(webview);  
}  

测试结果

将手机装上工程A和工程B。打开工程A,可以发现:工程B的JumpActivity会自动被打开。在Intent中可以去到网页里发出的链接:

lhc://aa.bb:80/test?p=12&d=1

输出结果:

scheme      --> lhc
host        --> aa.bb
dataString  --> lhc://aa.bb:80/test?p=12&id=1
id          --> 1
path        --> /test
path1       --> /test
queryString --> p=12&d=1

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

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

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

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

<iframe src="l" style="display:none"></iframe>  

就可以让已安装该应用的用户在打开该网页的时候,自动的跳转到应用内部。

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

参考博客:

http://www.lxway.com/240909442.htm

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值