`
wyzxzws
  • 浏览: 392246 次
  • 性别: Icon_minigender_1
  • 来自: dazhou
社区版块
存档分类
最新评论

html页面调用安卓应用

 
阅读更多
今天老大给我提了一个需求叫我调研一下,他已经测试了IOS平台上是可以的,需求很简单就是在系统浏览器中通过输入一个uri就可以打开相应的app。
比如你在IOS中的系统浏览器中输入:tel://123,就会跳到拨打电话页面而且拨打号码是123,像这样的命令,老大他用了小米手机测试了一下,发现可以的,所以他就以为Android的也是可以的,但是当我用三星和htc手机测试发现不行,这时候老大就纠结了,但是我个人认为,我们都知道小米手机是模仿IOS的,没想到模仿的这么想。所以老大就叫我去调研,我查阅了资料之后,找到了解决办法如下
先上一份代码,经楼主验证是绝对可以用的而且也比较清晰的代码!(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

 转自:http://blog.csdn.net/jiangwei0910410003/article/details/23940445

 

分享到:
评论

相关推荐

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

    现在,当在Unity中调用`OpenPlayStore`方法并传入应用的包名时,Android设备会启动`YourCustomActivity`,然后调用`OpenAppInPlayStore`,最终打开对应的应用市场页面。 在Unity工程中,确保正确地配置了...

    html5调用android

    此外,暴露给JavaScript的对象方法不应修改Android应用的状态,以防止恶意代码的注入。 5. **数据传输**:JavaScript与Java之间的数据传递通常通过函数参数完成。JavaScript调用Java方法时,可以传递JSON对象或字符...

    Android代码-安卓原生调用html和html调用原生

    它是一种技术手段,允许Android应用中的Java代码与HTML页面中的JavaScript进行双向通信。这种通信通常通过WebView组件来实现,WebView是Android系统提供的一种可以加载和显示网页的控件。 **一、Android原生调用...

    通过Html网页调用本地安卓app

    标题"通过Html网页调用本地安卓app"涉及到的核心技术是利用HTML页面中的超链接(`&lt;a&gt;`标签)和安卓APP中的`Intent Filter`配置。在HTML页面中,你可以创建一个链接,其`href`属性设置为特定的`scheme`: ```html ...

    网页调用安卓

    网页调用安卓是一种技术手段,它允许网页通过特定的接口或协议与安装在用户设备上的安卓应用程序进行交互。这种交互可以实现多种功能,比如启动一个已安装的应用、传递数据、或者像描述中提到的,调用手机的拨打电话...

    Android应用源码之android通过js调用安卓系统功能.zip

    这个压缩包“Android应用源码之android通过js调用安卓系统功能.zip”提供了相关的示例源码,帮助开发者理解和实践这一技术。 首先,我们来探讨JavaScript与Android交互的基础——WebView。WebView是Android SDK提供...

    Androd WebView 通过页面JS调用安卓铃声和震动

    在Android应用中,我们可以创建一个WebView实例,并通过设置`WebViewClient`和`WebChromeClient`来处理网页加载和与JavaScript的交互。例如: ```java WebView webView = (WebView) findViewById(R.id.webView); ...

    Android代码-android通过js调用安卓系统功能.rar

    总结起来,这个压缩包提供的示例展示了如何在Android应用中使用WebView组件,通过JavaScript Interface与JavaScript进行交互,实现从网页调用Android系统的特定功能。这对于开发混合型应用或者增强网页应用功能的...

    Android原生java语句 和html js互相调用 传递参数

    `WebView`不仅可以展示HTML页面,还能实现Android原生Java代码与HTML中的JavaScript交互,从而实现更丰富的功能。本教程将详细介绍如何在Android中通过Java语句与HTML中的JavaScript进行互调,并传递参数。 首先,...

    火山安卓网页调用火山应用并传入参数.rar

    在这个主题中,“火山安卓网页调用火山应用并传入参数”指的是从一个Android设备上的网页环境中启动火山应用,并且能够传递参数给这个应用。这涉及到Web和原生应用之间的交互,以及数据的传输和处理。 首先,我们...

    Android WebView H5调用拍照

    在Android应用开发中,WebView是一个非常重要的组件,它允许开发者在原生应用中展示网页内容。混合开发(Hybrid Development)结合了Web技术与原生应用的优势,使得开发者可以使用HTML5、CSS3和JavaScript来构建应用...

    android通过js调用安卓系统功能_Android源码.zip

    在Android开发中,有时我们需要在Webview中嵌入JavaScript代码,并允许这些JavaScript代码与原生Android应用进行交互,实现调用Android系统功能。这通常涉及到一个技术领域叫做“JavaScript Interface”,它使得...

    html5 android网络音乐播放器 可调用android播放本地音乐

    HTML5与Android网络音乐播放器是一种技术融合的产物,它结合了HTML5的网页开发能力与Android平台的原生功能,使得用户可以在浏览器或者特定的Web应用中播放网络音乐,甚至能够调用Android设备的本地音乐库。...

    安卓html5调用

    【安卓HTML5调用】是Android应用程序开发中的一个重要概念,它涉及到移动应用与Web技术的融合,特别是HTML5这种强大的Web标准在移动端的运用。HTML5以其丰富的交互性、离线存储能力以及多媒体支持,为开发者提供了...

    H5 调用android 相机拍照

    在Android应用中,通常会使用WebView组件来加载H5页面。WebView不仅能够展示网页内容,还可以通过JavaScript与Java代码交互,这就为我们提供了调用相机的可能性。关键在于实现`WebChromeClient`的`onShowFileChooser...

    android通过js调用安卓系统功能.zip

    在Android应用开发中,通过JavaScript调用安卓系统功能是一种常见的技术实践,这使得Web开发者能够利用WebView组件,结合JavaScript和原生代码,实现更丰富的交互体验。本项目提供的"android通过js调用安卓系统功能....

    Android高级应用源码-android通过js调用安卓系统功能.zip

    本资源“Android高级应用源码-android通过js调用安卓系统功能.zip”可能包含了一个示例项目,演示了如何在Android应用中实现通过JavaScript接口调用Android系统功能。下面,我们将深入探讨这一技术。 首先,Android...

    安卓浏览器WebViewJSHTML5相关-Android调用JavaScript.rar

    这个"安卓浏览器WebViewJSHTML5相关-Android调用JavaScript.rar"的压缩包文件,很显然,聚焦于Android如何利用WebView来调用JavaScript代码以及处理HTML5相关的功能。下面我们将深入探讨这一主题。 首先,WebView是...

    Android与H5交互相互调用对方的方法

    WebView不仅可以展示HTML页面,还能实现Android应用与网页(通常由HTML5编写)之间的交互。本教程将详细介绍如何在Android与H5之间进行相互调用,让Java与JavaScript之间实现无缝通信。 首先,我们要了解Android中...

Global site tag (gtag.js) - Google Analytics