怎么在android实现通过浏览器点击链接打开apk

怎么在android实现通过浏览器点击链接打开apk,第1张

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

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

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

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

这一句就可以了。

各个项目含义如下所示:

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

host:适当记述

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

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

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

<a href="myapp://jpapp/openwithname=zhangsan&age=26">启动应用程序</a>

接下来是Android端。

首先在AndroidManifestxml的MAIN Activity下追加以下内容。(启动Activity时给予)

※必须添加项

<intent-filter>

<action android:name="androidintentactionVIEW"/>

<category android:name="androidintentcategoryDEFAULT" />

<category android:name="androidintentcategoryBROWSABLE" />

<data android:scheme="myapp" android:host="jpapp" android:pathPrefix="/openwith"/>

</intent-filter>

HTML记述的内容加入<data …/>。

其中必须的内容仅scheme,没有其他内容app也能启动。

※注意事项:intent-filter的内容androidintentactionMAIN和 androidintentcategoryLAUNCHER这2个,不能与这次追加的内容混合。

所以,如果加入了同一个Activity,请按以下这样做,否则会导致应用图标在桌面消失等问题。

复制代码

<intent-filter>

<action android:name="androidintentactionMAIN"/>

<category android:name="androidintentcategoryLAUNCHER" />

</intent-filter>

<intent-filter>

<action android:name="androidintentactionVIEW"/>

<category android:name="androidintentcategoryDEFAULT" />

<category android:name="androidintentcategoryBROWSABLE" />

<data android:scheme="myapp" android:host="jpapp" android:pathPrefix="/openwith"/>

</intent-filter>

复制代码

这样的话,没有问题。

接下来在Activity中需要取值的地方添加以下代码,我是直接写在OnCreate函数里的:

Intent i_getvalue = getIntent();

String action = i_getvaluegetAction();

if(IntentACTION_VIEWequals(action)){

Uri uri = i_getvaluegetData();

if(uri != null){

String name = urigetQueryParameter("name");

String age= urigetQueryParameter("age");

}

}

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

需求很简单,通过Html页面中的一个超链接打开我们的App,实现也很简单。

网页

scheme:代表Scheme的协议名称(必要)

host和path可选择添加

query:代表URL传递的数据

简单的写一个页面:

接卸来开始配置AndroidManifestxml文件,在有 <action android:name="androidintentactionMAIN" /> 的actvity配置下新增一个filter,注意是新增一个filter,例如:

这里注意scheme里参数和我们在html页面里的对应关系,不要弄错,多了,我们在a标签里还传递了参数,接受也很简单,例如:

写完,我们来看看效果:

成功实现,控制台的日志也能看到我们的参数确实传递过来了:

就这样,记录下来,收工。

很多时候我们的应用在使用微信分享内容之后,希望其他用户点击该分享内容能够跳转到我们的App,以实现闭环,这样的分享才是最有价值的。这种需求涉及到不同应用之间的交互,虽然微信提供了分享SDK,但仍然有不少限制,现在总结两种在Android平台上初步认为可行的方案:

1分享网页,从分享的网页跳转回原App。

2分享WXAppExtendObject类型的数据,且只能分享给好友,好友从聊天列表点击收到的分享内容可以直接跳转第三方App(前提是好友手机上已经安装了该App)。

下面来详细说明两个方案,由于是在项目中实测的,为了隐私及行文方便,假设我们的应用的名字为MyApp,效果截图也就不再展示。

方案一:

从WebView(该WebView从属于另一个App,并非我们自己的App)跳转到MyApp的某个界面(这里以跳转到MyApp的Acticity A为例)。具体的实现逻辑如下:

(1)该WebView显示的网页内容只是一个超链接,自定义了一个scheme=myapp://,后边可以附加一些参数,如果需要从网页向App传值的话。

<html>

<head>

<meta >

1、自定义URL Scheme:

创建一个activity并加上一个<intent-filter>(如果该activity是包含其他<intent-filter>,则需新建一个<intenf-filter>,不能在原有filter上添加),内容为:

<action android:name="androidintentactionVIEW"/><!-- 若删除,使用startActivity启动androidcontentActivityNotFoundException,使用HTMLViewer启动找不到网页-->

<category android:name="androidintentcategoryBROWSABLE"/><!-- 若删除,使用startActivity启动ok,使用HTMLViewer启动找不到网页 -->

<category android:name="androidintentcategoryDEFAULT"/><!-- 若删除,使用startActivity启动androidcontentActivityNotFoundException,使用HTMLViewer启动找不到网页-->

<data android:scheme="myapp"/><!-- scheme的值可自定义 -->

2、通过URL Scheme启动Android应用

方式一:通过代码访问:Intent intent = new Intent();

/parse的参数值说明如下

只写myapp,启动androidcontentActivityNotFoundException

写myapp://12,成功

写myapp://dasd=ad,成功

/

intentsetData(Uriparse("myapp://12"));

startActivity(intent);

方式二:通过网页访问:

/href的值说明如下

只写myapp,找不到网页

写myapp://12,成功

写myapp://dasd=ad,成功

/

<html xmlns=">

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

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

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

这一句就可以了。

各个项目含义如下所示:

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

host:适当记述

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

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

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

<a href="myapp://jpapp/openwithname=zhangsan&age=26">启动应用程序</a>

接下来是Android端。

首先在AndroidManifestxml的MAIN Activity下追加以下内容。(启动Activity时给予)

※必须添加项

<intent-filter>

<action android:name="androidintentactionVIEW"/>

<category android:name="androidintentcategoryDEFAULT" />

<category android:name="androidintentcategoryBROWSABLE" />

<data android:scheme="myapp" android:host="jpapp" android:pathPrefix="/openwith"/>

</intent-filter>

HTML记述的内容加入<data …/>。

其中必须的内容仅scheme,没有其他内容app也能启动。

※注意事项:intent-filter的内容androidintentactionMAIN和 androidintentcategoryLAUNCHER这2个,不能与这次追加的内容混合。

所以,如果加入了同一个Activity,请按以下这样做,否则会导致应用图标在桌面消失等问题。

<intent-filter>

<action android:name="androidintentactionMAIN"/>

<category android:name="androidintentcategoryLAUNCHER" />

</intent-filter>

<intent-filter>

<action android:name="androidintentactionVIEW"/>

<category android:name="androidintentcategoryDEFAULT" />

<category android:name="androidintentcategoryBROWSABLE" />

<data android:scheme="myapp" android:host="jpapp" android:pathPrefix="/openwith"/>

</intent-filter>

这样的话,没有问题。

接下来在Activity中需要取值的地方添加以下代码,我是直接写在OnCreate函数里的:

Intent i_getvalue = getIntent();

String action = i_getvaluegetAction();

if(IntentACTION_VIEWequals(action)){

Uri uri = i_getvaluegetData();

if(uri != null){

String name = urigetQueryParameter("name");

String age= urigetQueryParameter("age");

}

}

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

可以说是五个吧: 1 Activity 2 Service 3 Broadcast Receiver 4 Content Provider 5 Intent c) 该方法启动的Service,可以通过Context对象调用stopService来关闭,也可以通过Service自身调用stopSelf()或stopSelfResult()来关闭,关闭之前

Google从Android N上开始把签名方法改成了scheme V2, 在P上又改成了scheme V3 在大环境里面编译是用的V3方法,但是在studio上目前还不支持 scheme V3 签名。所以如果shareUID的话,可能会出现签名不一致问题。

V2 和V1的差别是V2是对整个zip包进行签名,而且在zip包中增加了一个apk signature block,里面保存签名信息。

v3 是在v2的基础上增加了,certificate rotation or APK key rotation, 就是说增加了族系的概念,可以在原有的证书或者key的基础上做一个变化,变成新的key,用新的key签名,也是有效的。

详细签名说明可以参考下面两个文档。

>

以上就是关于怎么在android实现通过浏览器点击链接打开apk全部的内容,包括:怎么在android实现通过浏览器点击链接打开apk、Android 从浏览器链接打开App、android怎么把其他app的内容分享到自己的app里等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9549521.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存