通过浏览器直接打开Android App 应用程序

点击浏览器中的URL链接,启动特定的App。

首先做成HTML的页面,页面内容格式如下:

<a href="[scheme]://[host]/[path]?[query]">启动应用程序</a> 

这一句就可以了。

当然上面的 在标准形式,对于正常情况而言是OK的,但是每个浏览器有自己的特定义设置。

各个项目含义如下所示:

scheme:判别启动的App。 ※详细后述

host:适当记述

path:传值时必须的key     ※没有也可以

query:获取值的Key和Value  ※没有也可以

作为测试如下:

<a href="myapp://jp.app/openwith?name=zhangsan&age=26">启动应用程序</a>

首先在AndroidManifest.xml的MAIN Activity下追加以下内容。(启动Activity时给予)
<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:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>
</intent-filter>
HTML记述的内容加入<data …/>。其中必须的内容仅scheme,没有其他内容app也能启动。
※注意事项:intent-filter的内容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】这2个,不能与这次追加的内容混合。                 所以,如果加入了同一个Activity,请按以下这样做,否则会导致应用图标在桌面消失等问题。

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<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:scheme="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>
</intent-filter>


接下来在Activity中需要取值的地方添加以下代码,我是直接写在OnCreate函数里的:
Intent i_getvalue = getIntent();  String action = i_getvalue.getAction();    if(Intent.ACTION_VIEW.equals(action)){      Uri uri = i_getvalue.getData();      if(uri != null){          String name = uri.getQueryParameter("name");          String age= uri.getQueryParameter("age");      }  }

首先,是UC浏览器,如果你使用了自己的scheme,而不是http的话,uc会默认在你的scheme前面添加http://。这太坑爹了。其他浏览器没看是不是同样的情况。发现这个问题后我就试着把自己的scheme换成http。然后满怀期待的又跑了一遍,结果还是坑爹了。所以我想会不会是第三方浏览器对url做了处理。到这里,我也无可奈何了。我测试了UC,猎豹,欧朋,这3个都不支持。系统自带的和谷歌浏览器是支持的,但是最新版的谷歌浏览器好像也不支持了,firefox目前还支持。
官方的文档有解释:http://developer.android.com/guide/topics/manifest/data-element.html

scheme://host:port/path or pathPrefix or pathPattern

这里面定义的schema+host+port+(path or pathPrefix or pathPattern)能拼凑出一个http链接,包含这个filter的Activity,能处理这个http链接。
运行结果应该是,有安装该应用的话,会打开该应用,如果没有会跳转到指向的页面。在HTML页面里面可以自动重定向到下载链接,这个就能自动下载。



时间: 2024-10-03 13:27:02

通过浏览器直接打开Android App 应用程序的相关文章

通过浏览器直接打开Android应用程序

需求 通过手机浏览器直接打开Android应用程序.假设本地已经安装了指定Android应用,就直接打开它:假设没有安装,则直接下载该应用的安装文件(也能够跳转到下载页面). 实现效果 假设手机上已经安装了App.则直接打开.假设没有安装,则開始下载. 实现方式 1.为Android应用的启动Activity设置一个Schema,例如以下: <data android:host="splash" android:scheme="huiyy" /> 2.用

如何通过网页打开Android APP

如何通过网页打开Android APP 1.首先在编写一个简单的html页面 html页面中只有一个简单的连接,代码如下: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> &

更新:通过浏览器直接打开Android应用程序

之前写过一篇blog,介绍如何通过点击浏览器中的链接,直接打开本地Android App. 实现方式不太完美,最近看了微博.京东的手机版网页,感觉他们的实现方式很不错,研究了一下,实现以下效果: 如果本地已经安装了指定Android应用,就直接打开它:如果没有安装,则直接下载该应用的安装文件(也可以跳转到下载页面). 实现方式 1.为Android应用的启动Activity设置一个Schema,如下: <data android:host="splash" android:sch

直接通过浏览器打开Android App 应用

点击浏览器中的URL链接,启动特定的App. 首先做成HTML的页面,页面内容格式例如以下: <a href="[scheme]://[host]/[path]?[query]">启动应用程序</a> 这一句就能够了. 当然上面的 在标准形式,对于正常情况而言是OK的.可是每一个浏览器有自己的特定义设置. 各个项目含义例如以下所看到的: scheme:判别启动的App. ※具体后述 host:适当记述 path:传值时必须的key     ※没有也能够 quer

Android APP 两种用程序拨号的方式

想在APP中添加一个拨号功能该怎样做呢?Android提供了两种方式,一种是ACTION_CALL方式直接拨打,另一种是ACTION_DIAL方式打开系统的拨号界面. 下面我们来做个小例子 首先需要在AndroidManifest.xml中添加一个使用权限,这个容易忘哈哈. <uses-permission android:name="android.permission.CALL_PHONE" /> 然后搭一个简单的界面测试一下,下面是布局文件代码 <?xml ve

js 通过浏览器直接打开应用程序(IOS,Android)并判断浏览器内核

本功能主要用于手机端,如果手机未安装该APP,则跳转至下载页面:否则,直接打开手机中的APP. <div style="position:absolute; top:84%; left:24%; z-index:8;"> <a id="J-call-app" href="javascript:;"><img src="image/but01.jpg"></a> <input

android -------- 打开本地浏览器或指定浏览器加载,打电话,打开第三方app

开发中常常有打开本地浏览器加载url或者指定浏览器加载, 还有打开第三方app, 如 打开高德地图 百度地图等 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器. 如果手机本身安装了多个浏览器而又没有设置默认浏览器的话,系统将让用户选择使用哪个浏览器来打开连接. Uri uri = Uri.parse("https://www.baidu.com"); Intent intent = new Intent(Intent.ACTION_VIEW, uri);

推荐下载App,如果本地安装则直接打开本地App(Android/IOS)

推荐下载App,如果本地安装则直接打开本地App(Android/IOS) - 纵观现在每家移动网站,打开首页的时候,都有各种各样的形式来提示你下载自身的移动App(Android/IOS),这是做移动客户端产品的一个很好地引流的手段.当然各家引流下载的交互和视觉各不相同,有的是完全“强奸”用户,有的是完全取悦用户.但是最终的形式就是你点击一个按钮之后,可以去下载对应的App(Android直接下载对应的Apk文件,IOS会跳转到App store的对应地址). 之前开发这个需求的时候,就是很简

给你的移动网站加点料:推荐下载App,如果本地安装则直接打开本地App(Android/IOS)

纵观现在每家移动网站,打开首页的时候,都有各种各样的形式来提示你下载自身的移动App(Android/IOS),这是做移动客户端产品的一个很好地引流的手段.当然各家引流下载的交互和视觉各不相同,有的是完全“强奸”用户,有的是完全取悦用户.但是最终的形式就是你点击一个按钮之后,可以去下载对应的App(Android直接下载对应的Apk文件,IOS会跳转到App store的对应地址). 之前开发这个需求的时候,就是很简单的针对用户访问的useragent进行判断,如果android设备,给出的是a