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页面。系统内置浏览器肯定是可以的,只是第三方浏览器可能存在这个问题,不过我的手机测试基本都可以,没问题。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android开发中,将浏览器设置为默认浏览器需要以下三个步骤: 1. 在AndroidManifest.xml文件中添加如下代码: ``` <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> <data android:scheme="https" /> </intent-filter> </activity> ``` 上述代码中,我们设置了MainActivity作为处理在浏览器打开HTTP或HTTPS链接的Activity。这将把我们的应用程序添加到系统默认浏览器的列表中。 2. 在MainActivity.java文件中添加如下代码: ``` Uri uri = getIntent().getData(); Intent browserIntent = new Intent(Intent.ACTION_VIEW, uri); startActivity(browserIntent); ``` 上述代码中,我们首先获取从浏览器传递的数据,并使用ACTION_VIEW Intent建立一个新的浏览器Intent,最后启动它。 3. 在res文件夹中的layout文件夹中创建一个布局文件,并添加一个使用onClick属性的按钮。在MainActivity.java文件中实现此按钮的点击事件并添加以下代码: ``` PackageManager pm = getPackageManager(); ComponentName componentName = new ComponentName(this, MainActivity.class); pm.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); Intent intent = new Intent(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_BROWSABLE); intent.setData(Uri.parse("http://www.google.com")); startActivity(intent); ``` 上述代码中,我们使用PackageManager和ComponentName类启用我们的主Activity,设置intent的数据来打开特定的网站,并启动新的浏览器Intent。 通过上述三个步骤,我们可以将我们的应用设置为Android系统中默认的浏览器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值