srt是什么文件-c gdi

搜狗游览器下载
2023年4月3日发(作者:保护视力设置)

通过H5(浏览器WebView其他)唤起本地app

第⼀种⽅式:

通过在html的a标签⾥⾯的href中直接配置android端的scheme,当然,如果有host其他的配置,跟在后⾯就可以了,android端配置和代码如

下:

android端配置:

android:scheme="abraham"/>

注:如果这个是配置在启动页要和标签并列在⼀起,不然运⾏后⼿机app的图标会没有;注意scheme协议要⼩写,否则会有不能响应的异常!

html代码:

Inserttitlehere

打开app

这⾥我们来看看scheme拼接协议的格式:

启动应⽤程序

各个项⽬含义如下所⽰:

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

host:适当记述

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

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

以上就能实现打开本地的app了,当然是在app存在的情况下,否则的话没有反应。

⼤家可能会问上⾯的html代码中配置的不是android⾥⾯配置的scheme协议吗?我明明没有配置pid,为什么要写这个呢?这是因为我们有些时

候在唤起本地app的时候可能会向app传递⼀些参数,这些参数我们就可以配置在这⾥,我们只需要在oncreate⾥⾯获取就可以了,代码如下:

Intentintent=getIntent();

Uriuri=a();

if(uri!=null){

Stringpid=ryParameter("pid");

}

如果还想要获取android⾥⾯配置的scheme协议的话,还可以这样:

Uriuri=getIntent().getData();

if(uri!=null){

//完整的url信息

Stringurl=ng();

Log.e(TAG,"url:"+uri);

//scheme部分

Stringscheme=eme();

Log.e(TAG,"scheme:"+scheme);

//host部分

Stringhost=t();

Log.e(TAG,"host:"+host);

//port部分

intport=t();

Log.e(TAG,"host:"+port);

//访问路劲

Stringpath=h();

Log.e(TAG,"path:"+path);

ListpathSegments=hSegments();

//Query部分

Stringquery=ry();

Log.e(TAG,"query:"+query);

//获取指定参数值

StringgoodsId=ryParameter("goodsId");

Log.e(TAG,"goodsId:"+goodsId);

}

如何判断⼀个Scheme是否有效:

PackageManagerpackageManager=getPackageManager();

Intentintent=newIntent(_VIEW,("abraham://:8888/goodsDetail?goodsId=10011002"));

Listactivities=ntentActivities(intent,0);

booleanisValid=!y();

if(isValid){

startActivity(intent);

}

这种⽅式也是我百度到的最多的⽅式,但是这样就带来了⼀个问题了,上⾯的需求说的是“在页⾯上有⼀个连接,如果⽤户安装了APP,则点击

打开对应的APP;如果⽤户没有安装,则点击打开对应的设置连接”,这明显就不符合需求了,这只能作为⼀些个别需求来使⽤了。

第⼆种⽅式:

既然通过在href配置scheme协议不⾏,那就只能通过js代码来实现了,只有这样才能根据判断实现app有的时候就打开,没有的时候就跳转到下

载链接下载。

  我们知道,js是⽆法判断⼿机是否安装了某款app的,所以我们只能够曲线救国了,我们可以获取时间如果,长时间不能呼起app则默认为没

有安装这款app,然后跳转到下载页。当然这不是我想出来的,是⽹上的各位⼤佬的想法。在这⾥⼜要细分为两种情况了。

1.直接唤醒

说明:通过h5可换醒app,如访问⼀个URL,点击按钮,打开应⽤,如果该应⽤APP没有安装,那么直接跳转到AppStore的APP下载页⾯,通

过点击的⽅式兼容性较好,如果安装了app,在⼿机各⼤浏览器(360浏览器、uc浏览器、搜狗浏览器、QQ浏览器、百度浏览器)和QQ客户端

中,能唤醒。微信、新浪微博客户端、腾讯微博客户端⽆法唤醒。

代码如下:

点击唤醒demo

唤醒浙江移动⼿机营业厅!

functionapplink(){

returnfunction(){

varclickedAt=+newDate;

setTimeout(function(){

!Hidden&&setTimeout(function(){

if(+newDate-clickedAt<2000){

on='/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#';

}

},500);

},500)

};

}

mentById("zjmobliestart").onclick=applink();

2.点击唤醒

说明:通过h5可换醒app,如访问⼀个URL就能直接打开应⽤,如果该应⽤APP没有安装,那么直接跳转到AppStore的APP下载页⾯。兼容性

⼀般:在⼿机各⼤浏览器(360浏览器、uc浏览器、搜狗浏览器QQ浏览器、百度浏览器)能唤醒。微信、QQ客户端、新浪微博客户端、腾讯微

博客户端⽆法唤醒。

代码如下:

直接唤醒demo

唤醒浙江移动⼿机营业厅!

functionapplink(){

on='zjmobile://platformapi/startapp';

varclickedAt=+newDate;

setTimeout(function(){

!Hidden&&setTimeout(function(){

if(+newDate-clickedAt<2000){

on='/us/app/zhe-jiang-yi-dong-shou-ji/id898243566#';

}

},500);

},500)

}

applink();

这样就完成了我们的需求了,在这个过程中,也遇到了很多热⼼⼈的讲解,这⾥记录⼀下,刚开始有⼈没理解我的需求,以为我是在android端来

实现,让我通过包名的⽅式来检验app是否安装,这⾥记录⼀下⽅法,代码如下:

更多⽅法请查看我的⼯具类:CommonUtilLibrary

还有的就是以为我是要在app⾥⾯通过加载webview的形式来唤起本地的app,这⾥也记录⼀下,代码如下:

ViewClient(newWebViewClient(){

@OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){

Uriuri=(url);

if(eme().equals("abraham")&&t().equals("")){

Stringarg0=ryParameter("arg0");

Stringarg1=ryParameter("arg1");

}else{

l(url);

}returntrue;

}});

还要注意的是,如果是在微信中唤起本地app,⼿机的微信中,是利⽤微信内置的浏览器(你可以将之前获取的页⾯在服务器上的地址发给你的任

何联系⼈,点击发送的消息即可打开⽹页)打开那个简单的HTML页⾯,注意:直接打开scheme://host/datastring是不可⾏的,微信不会把这

串字符解析成⽹址,必须包装成⽹页才能借助微信的浏览器打开。进⼊后就是我们刚刚设计的页⾯。这个时候,直接点击“启动应⽤程序”是不会

唤醒之前安装的APP的,因为微信做了屏蔽,你需要在右上⾓的菜单中选择“在浏览器中打开”。这个时候,有些浏览器就可以唤醒,有些浏览

器则不⾏,⽐如笔者测试机MX4上的内置浏览器不⾏,UC浏览器就能唤醒。部分浏览器不能唤醒,笔者查阅了很多资料也不能彻底解决,我现在

唯⼀能想到的是将遇到问题的浏览器让前端做⼀个判断,提⽰不⽀持,应该使⽤什么浏览器。如果有读者有解决⽅案,敬请留⾔,多谢!

后记:

  微信中为什么⽆法唤醒App,需要“⽤浏览器打开”?

  因为微信对所有的分享连接做了scheme屏蔽,也就是说分享连接中所有对于scheme的调⽤都被微信封掉了。

  那为什么有些应⽤是可以唤起的,⽐如⼤众点评,嘀嘀打车?

  从⾮技术⾓度讲,因为⼤众点评,嘀嘀打车都是微信的⼲⼉⼦,亲⼉⼦。对于⼉⼦有特殊照顾。

  从技术⾓度讲,微信有⼀个⽩名单,对于在⽩名单中的分享连接是不会屏蔽掉scheme调⽤的。

到这⾥,⼤家就应该明⽩,想借⽤⼤众点评的scheme,绕过这个问题是不可能的,除⾮你的分享连接能挂到⼤众点评的根域名上。

这个问题应该解释清楚了,另外提⼀句,对于下载apk这种,微信是屏蔽任何应⽤的,对于⼉⼦也不例外,所以你想提供下载链接,⽆论你是不是

⼉⼦,都逃不过使⽤浏览器打开之中low的⽅式了.

附录:常见应⽤的URLScheme

1,系统默认应⽤

2,常⽤第三⽅软件

更多推荐

搜狗游览器下载