如果在Android中安装了特定应用程序,则从浏览器中检测

我正在寻找一种方法,以确定是否从客户端的Web浏览器安装特定的应用程序。 该平台是Android。

例如,我写我自己的网站,我写我自己的应用程序,现在我想当用户从Android手机浏览器来到我自己的网站。 浏览器看看应用程序是否已经安装在手机上,如果不是build议安装应用程序。 我可以这样做吗?

你的意思是从浏览器中运行的JavaScript? 我想(希望)那是不可能的。 我不希望任何随机的网站能够看到什么应用程序安装。

如果你想让用户安装一个特定的应用程序,你可以在你的网站上提供一个市场链接: http : //developer.android.com/guide/publishing/publishing.html#marketintent

编辑:在您对我的回答的评论澄清之后,更有用的答案出现在下面,这当然有更多upvotes。

有一种方法来实现这一点。

出于安全和隐私的原因,您无法检测是否安装了特定的应用程序。 但是,如果安装了应用程序,则可以开启应用程序,如果不是,则可以打开其Google Play页面。

为此,您必须在应用程序的主要活动中创build一个意图filter,以便在调用给定的URL时将其打开。 喜欢这个:

<activity android:name=".MainActivity > <intent-filter> <data android:host="www.myurl.com" android:pathPrefix="/openmyapp" android:scheme="http" > </data> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

解释:当用户导航到http://www.myurl.com/openmyapp&#x65F6; ,如果安装了应用程序,则会创build一个意图,并显示活动。

但是,如果用户没有安装该应用程序呢? 那么你需要在你的http://www.myurl.com/openmyapp/index.html上创build一个redirect页面&#x3002; 当用户到达这个地址时,你的服务器必须redirect到market://details?id=com.your.app.package

这样,当用户导航到http://www.myurl.com/openmyapp后,当没有意图被创build,networking服务器将调用另一个URL&#x3002; 该url反过来会直接在应用的页面上打开设备上的Google Play。

希望它有帮助。

我find了一个更有用的解决scheme。 下面是androidconfiguration文件:

 <activity android:name="me.test.html.MainActivity" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="xxxxx" android:scheme="mm" /> </intent-filter> </activity> 

以下是html代码:

 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script type="text/javascript"> function test2(){ var di = document.getElementById("di"); di.innerHTML = "app have not installed"; } function newOpen(){//184 064 323 438 var di = document.getElementById("di"); di.innerHTML = "app have installed"; var ifc = document.getElementById("ifc"); ifc.innerHTML = "<iframe src='mm://xxxxx?a=b&c=d' onload='test2()'></iframe>"; return false; } </script> </head> <body> <a href="#" onclick="return newOpen()">local3</a><br/> <div id="di"></div> <div style="display:none;" id="ifc"></div> </body> </html> 

这样,当用户点击标签,并且如果设备安装了应用程序,则它将不会显示让用户select的对话框,而是直接打开应用程序; 如果应用程序还没有安装,那么js函数“test2”将被调用,因此我们知道该应用程序尚未安装,所以我们可以在“test2”中做任何事情! 好处是我们不需要使用标准的html模式,这将显示一个select对话框,如果我自己使用定义的模式,页面将不会导航到错误的页面! 我是中国人,英文不好,希望大家能理解我,让别人知道。

你可以使用Android的意图。 您可以构build一个意图锚来启动应用程序。 如果未安装该应用程序,则浏览器将search意图定位符中指定的包名称。 我们也可以提供一个回退url。

例:

 <a href="intent://scan/#Intent;scheme=zxing package=com.google.zxing.client.android;end"> Take a QR code </a> 

这在所有的浏览器中都不被支持。 Chrome和其他几个主stream浏览器都支持它。 检查此链接的更多细节。

我知道这是迟到的想法可能会帮助某人。