Android通过浏览器打开app页面并且传递值

news/2024/7/6 4:51:55

最近公司有个需求,要求从第三方网页端打开一个网页,然后在网页中点击“下载”,“打开”按钮,在app端进行下载和打开操作。这里记录下方法。

首先,网页和app页面进行交互,其实会很快想到JS交互,但是现在需要在第三方浏览器中,那就没法拿到Webview,也就没法js互交,所以这里android也提供有方法。 
看一个静态页面(html):

<BODY>
    <a href="hjz://com.zjmk.hjz_progressmotirx/openwith?gameid=12007&pk_name=com.surfing.android.tastyfood">启动应用程序</a> 
    </p></br></p>
    <a href="hjz://com.zjmk.hjz_progressmotirx/down?apkurl=http://down.hjz518.com/upload/APK/2015-5/19/150519172102.apk&apkname=黄金指&memo=这是一款牛逼的手赚软件&gameid=12007&pk_name=com.surfing.android.tastyfood">启动应用程序下载页面</a>
 </BODY>

我们看看href里面的组成: 
- hjz://:这里的hjz://是“scheme”。 
- com.zjmk.hjz_progressmotirx:这个是“host”。 
- /down:这个是方法名前缀“pathPrefix”。 
- apkurl=….&pkname=…:这个是传递的参数。

看到以上代码可能还是不是很明白这些有什么用,那么接着往下看…. 
看android端: 
其实在android里面的项目清单住处的Activity下面可以添加很多数据节点,如 ,,,….

<activity android:name=".OpenapkActivity"
            android:label="@string/app_name"
    android:theme="@android:style/Theme.Black.NoTitleBar">
             <intent-filter>  
                <action android:
                name="android.intent.action.VIEW"/>  
                <category android:
                name="android.intent.category.DEFAULT" />  
                <category 
                name="android.intent.category.BROWSABLE" />  
                <data 
                android:scheme="hjz" android:host="com.zjmk.hjz_progressmotirx" android:pathPrefix="/openwith"/> 
            </intent-filter>
        </activity>

看这个activity注册,在其下面添加了几个数据节点,action,category,data。看来data里面的数据应该就很明白了,data节点里面的数据都是和我们网页相对应的,如 
scheme=”hjz”,//协议 
host=”com.zjmk.hjz_progressmotirx”;//主机 
pathPrefix=”/openwith”;//方法前缀

只有先对应才能正确的启动页面。

在activity中获取数据:

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.openapklayput);
        Intent intent=getIntent();
        String action = intent.getAction(); 
        if(Intent.ACTION_VIEW.equals(action)){  
            Uri uri =intent.getData();  
            if(uri != null){ 
                //根据属性值获取数据
                String gameid=
                       uri.getQueryParameter("gameid");
                String pkname=
                       uri.getQueryParameter("pk_name");
                    PackageManager packageManager =                 
                                     getPackageManager();
                Intent intent2=new Intent();
                intent2 =packageManager
                       .getLaunchIntentForPackage(pkname);
                startActivity(intent2); 
                Intent intent1=
                    new Intent(this,MotirxServices.class);
            }  
        }
    }

……到这里可以完成第三方浏览器和自己app应用的交互在跳过WebVIew的情况下,但是这里可能会有一个悲催的事情,就是他的兼容性。在369获取猎豹浏览器中href=“”;这里在scheme前面自动加上http://….. 
这里就导致不能正常的打开我们指定的app页面。系统内置浏览器肯定是可以的,只是第三方浏览器可能存在这个问题,不过我的手机测试基本都可以,没问题。


http://www.niftyadmin.cn/n/2751130.html

相关文章

Authentication error: Unable to respond to any of these challenges

网上说由于APPKEY AND APPSECRET错误的原因.在我这里也差不多,也是没有通过,是由于我写了sina 和 tencent的接口,将获得的accesstoken and accesssecret存入数据库,取的时候没有注意,将sina的错取成了tencent,所以导致了此错误.

DataRead和DataSet的异同

第一种解释 DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection(俗称&#xff1a;非断开式连接),在线操作数据库时&#xff0c;任何对SqlConnection的操作都会引发DataReader的异常。因为DataReader每次只在内存中加载一条数据,所以占用的内存是很小的。…

LeetCode Valid Parentheses

LeetCode解题之Valid Parentheses 原题 推断一个仅仅包括各种括号符号的字符串中括号的匹配情况。 注意点&#xff1a; 字符串中仅仅会包括”(“,”)”,”[“,”]”,”{“,”}”这些字符括号匹配要注意顺序&#xff0c;字符串”([)]”是错误的匹配样例&#xff1a; 输入: s”()…

参对象和map_AI论技| mAP提升40%,更快更精准的YOLO来了!还支持实例分割?!

不久前给大家详细介绍了经典的目标检测算法yolov3&#xff0c;最近基于yolov3的改进版本poly-yolo来了&#xff0c;模型参数量仅为yolov3的60%&#xff0c;但是map却提升了40%&#xff0c;还能应用于实例分割&#xff0c;一起来看看细节和其惊人的效果吧&#xff01;本文由品览…

如何搭建FTP服务器

7分步阅读FTP服务器可以方便的供用户上传&#xff0c;下载文件&#xff0c;对于我们日常的教学&#xff0c;工作都有着很大的帮助&#xff0c;今天小编就为大家讲解下如何在搭建FTP服务器希望对大家有所帮助。工具/原料电脑一台方法/步骤1首先我们创建一个用户账户用于登录FTP进…

c语言和python实用性_C语言和Python语言,那个更好?

(3)灵活性Python语言的最大优点在于它的灵活性&#xff0c;这在测试领域非常重要&#xff0c;因为测试所面临的业务和需求经常在变化&#xff0c;有时它们甚至无法满足并自行决定&#xff0c;而在这时&#xff0c;你可以使用Python丰富的第三方库轻松找到解决方案。(4)扩张Pyth…

HDU 4401 Battery(积分)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4401 题意&#xff1a;给出一个长度为L的太阳能电池板。若阳光直射在板上&#xff0c;单位长度单位时间发电为1.斜射的话要乘以sin(x),x为阳光和地面夹角。求某一时间段太阳能电池板的发电量。 思路&#xff1a…

趣谈网络原理 网关(自我提升第二十四天)

第一&#xff0c;菜鸟感觉这个极客时间的专栏因为是每天挑一个学&#xff0c;然后写博客&#xff0c;感觉顺序比较乱&#xff0c;我今天整理了一下。 第二&#xff0c;菜鸟感觉这些东西真的是&#xff1a;一天不学&#xff0c;等于白学。我才几天没看这个趣谈网络原理&#xf…