`

android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据

 
阅读更多

为了实现这个功能可折腾了我好久,先上一份代码,经楼主验证是绝对可以用的而且也比较清晰的代码!(ps:还是先剧透下吧,第三方大部分浏览器无法成功。)

 

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

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

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

这一句就可以了。

 

各个项目含义如下所示:

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

host:适当记述

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

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

 

作为测试好好写了一下,如下:

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

 

接下来是Android端。
首先在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");  
    }  
}
 

这样就能获取到URL传递过来的值了。

——————————————————————————————————我是分割线————————————————————————————————————

 

代码copy完了,是不是很惊奇的发现用浏览器输入

 

myapp://jp.app/openwith?name=zhangsan&age=26

是不是404,打不开?

楼主你这不是骗人么!楼主你个混蛋啊。

客官,稍安勿躁啊,你看看你用的浏览器是什么?UC,猎豹,欧朋?放弃吧,试试系统自带浏览器或者谷歌浏览器吧。肯定能成功的,不能成功的话再来坑我。哈哈。

 

——————————————————————————————————我是分割线————————————————————————————————————

突然觉得好悲哀,好不容易get了这个技能,却不能被第三方浏览器使用。在这个android浏览器大部分被第三方占据着的时代不得不说是个悲剧啊。

 

接下来还是说说为什么第三方浏览器不能成功吧。首先,我发现的是UC浏览器,如果你使用了自己的scheme,而不是http的话,uc会默认在你的scheme前面添加http://。这太坑爹了。其他浏览器没看是不是同样的情况。发现这个问题后我就试着把自己的scheme换成http。然后满怀期待的又跑了一遍,结果还是坑爹了。所以我想会不会是第三方浏览器对url做了处理。到这里,我也无可奈何了。我测试了UC,猎豹,欧朋,这3个都不支持。系统自带的和谷歌浏览器是支持的。

 

最后再补充个线索吧,在浏览器里搜索百度应用。进了他们的页面后,他们是可以实现在各种浏览器启动已经安装好的本地app的。看到这个后我就看了下他们页面的源码。

在这里他们页面添加了个data-sentintent的标签,看到这里,应该能确定第三方浏览器应该是默认都不支持发intent的,只能自己起一个。根据前端说,这个标签应该是自定义的。我们前端看源码的时候发现是这样的

所以最后的结果应该是百度这边是起了个端口,然后在应用里启用了一个服务,来监听这个端口,来获取这个intent。大概就这个思路了。不过楼主没有实际去操作。项目时间紧,太麻烦了。对了,百度这个是有集成他们inapp这个sdk的。

再附上stackoverflow两个相关链接:http://stackoverflow.com/questions/3469908/make-a-link-in-the-android-browser-start-up-my-app

http://stackoverflow.com/questions/2958701/launch-custom-android-application-from-android-browser

分享到:
评论

相关推荐

    Android-一个App内嵌浏览器

    在Android应用开发中,内嵌浏览器(In-App Browser)是一种常见的功能,它允许用户在应用程序内部浏览网页,而无需跳转到外部浏览器。本文将详细介绍Android中的内嵌浏览器实现,特别是基于WappBrowser的实践。 ...

    android通过html打开本地app

    这个资源"android通过html打开本地app"提供了一种实现方式,使得开发者能够从HTML页面中启动Android应用程序,并且能够传递数据。下面我们将详细探讨这一技术及其相关知识点。 1. Web Intent 桥接: HTML页面不能...

    windows下浏览器调用本地应用程序

    在Windows操作系统中,浏览器通常用于浏览网页和交互网络资源,但有时我们可能需要从浏览器中调用本地的应用程序,以实现特定的功能或者扩展浏览器的能力。这个过程涉及到JavaScript(JS)编程以及与.exe可执行文件...

    微信跳转到浏览器下载APP实现代码

    在移动互联网时代,微信作为一款超级App,拥有庞大的用户群体,很多开发者希望能在微信内部实现跳转到外部浏览器下载自己的应用程序。本知识点主要探讨如何通过编程实现“微信跳转到浏览器下载APP”的功能,这对于...

    通过超链接url打开一些常见app(scheme)

    在Android开发中,"通过超链接URL打开一些常见APP(scheme)"是一个常见的功能,它涉及到应用程序间的交互和深度链接技术。此功能允许用户点击一个链接,比如在浏览器或者社交媒体应用中,然后直接跳转到特定的应用...

    android:scheme 通过uri跳转到APP应用指定Activity

    总的来说,`android:scheme`是Android中实现深度链接的关键,它允许开发者通过自定义URI协议实现从外部应用或系统直接跳转到应用内的特定页面,提高了应用的可发现性和交互性。在实际项目中,开发者应合理设计和利用...

    微信下载APP跳转到浏览器页面,遮罩层提示,浏览器下载APP逻辑

    通过以上解释,我们可以理解微信下载APP跳转到浏览器页面的逻辑是出于安全考虑,而遮罩层提示则旨在提升用户体验。在实际应用开发中,遵循这些原则和步骤,可以帮助我们构建更安全、流畅的下载流程。

    uniapp APP打开浏览器界面(browser.js)

    uniapp APP打开浏览器界面

    详解如何通过H5(浏览器/WebView/其他)唤起本地app

    前两天接到一个无线的需求,我这个小白可是忙活了好几天……在页面上有一个连接, 如果用户安装了APP,则点击打开对应的APP如果用户没有安装,则点击打开对应的设置连接.上网搜索了一下,基本都说可以实现,但是实际...

    微信跳转浏览器下载APP,打开网页实现代码.rar

    然而,由于微信对于外部链接和下载的限制,开发者通常需要采取特殊的方式来实现从微信内跳转到系统默认浏览器进行APP的下载。本文将详细讲解如何实现“微信跳转浏览器下载APP”这一功能,以及涉及的关键知识点。 ...

    cordova在app内部指定浏览器打开链接插件

    标题中提到的“cordova在app内部指定浏览器打开链接插件”指的是一种Cordova插件,它允许开发者在混合移动应用(Hybrid Mobile Application)内部打开网页链接,而不是通过外部浏览器打开。这种插件通常用于需要在...

    .IOS通过手机浏览器打开指定APP

    - 示例中还展示了如何通过点击按钮,使用JavaScript函数openApp()来触发iframe打开自定义URL的动作,当APP能够响应URL时,用户将会直接跳转到APP;如果不能,则会跳转到iTunes的下载页面。 这些知识点对于iOS应用...

    安卓浏览器WebViewJSHTML5相关-点击浏览器中的URL链接启动特定的App.rar

    这个压缩包文件"安卓浏览器WebViewJSHTML5相关-点击浏览器中的URL链接启动特定的App.rar"主要探讨了如何通过WebView来实现一个功能:当用户在浏览器中点击特定的URL链接时,能够启动指定的App。这一功能在很多移动...

    通过网页打开本地应用

    当用户在网页上点击链接`打开应用&lt;/a&gt;`时,浏览器会尝试寻找能处理这个协议的本地应用,并启动它。 2. **JavaScript API**:JavaScript可以通过浏览器提供的API来与本地系统进行交互。例如,使用`window.navigator....

    APP源码,安卓应用嵌套浏览器实现app应用

    在Android应用开发中,将网页内容嵌入到APP中是一种常见的做法,这通常涉及到使用WebView组件。本项目提供的"APP源码"展示了如何在安卓应用中实现这一功能,以创建一个混合式应用,即结合了原生应用的功能与网页内容...

    JS实现点击网页判断是否安装app并打开否则跳转app store

    a、点击Banner,进入到APP Store中对应的APP下载页 b、APP下载页中提示:安装;用户点击安装 c、安装完成后,APP下载页中提示:打开;用户继续点击打开 d、用户正常使用APP 2、用户第二次访问宣传页面 a、点击Banner...

    android 通过应用包名打开应用

    本示例“android 通过应用包名打开应用”将介绍如何在Android中通过已知的应用包名启动该应用。 首先,我们需要理解Android中启动另一个应用的基本过程。这个过程通常涉及使用`Intent`对象,`Intent`是Android中...

    Android 实现浏览器跳转APP应用,网页也可以跳转APP

    接下来,当用户在浏览器中点击一个带有自定义URL Scheme的链接时,比如`打开APP&lt;/a&gt;`,Android系统会尝试找到已安装的应用中注册了该URL Scheme的Activity,并启动它。如果有多处注册了相同Scheme,用户可能会有选择...

    unity和安卓交互调用安卓浏览器拉起应用市场

    在某些情况下,开发者可能需要实现Unity与Android原生代码的交互,以便进行特定功能的扩展,例如在游戏内更新(热更新)或者引导用户到应用市场进行评分或查看更新。本文将详细讲解如何实现Unity和Android之间的交互...

Global site tag (gtag.js) - Google Analytics