zoukankan      html  css  js  c++  java
  • Android通过浏览器打开app页面并且传递值

    最近公司有个需求,要求从第三方网页端打开一个网页,然后在网页中点击“下载”,“打开”按钮,在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页面。系统内置浏览器肯定是可以的,只是第三方浏览器可能存在这个问题,不过我的手机测试基本都可以,没问题。

  • 相关阅读:
    高效出去List集合和数组中的重复元素
    各进制间转换总结
    java集合应用类
    禁止键盘上的刷新键F5等
    Map迭代
    java 过滤字符串方法实现
    java 跟 咖啡的关系
    插件jfreechart+shh实现树状图 柱状图 折线图
    Struts2利用iText导出word文档(包含表格)
    request.getRequestURI() 、request.getRequestURL() 、request.getContextPath()、request.getServletPath()区别
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/7221064.html
Copyright © 2011-2022 走看看