srt是什么文件-c gdi
![搜狗游览器下载](/uploads/image/0485.jpg)
2023年4月3日发(作者:保护视力设置)
通过H5(浏览器WebView其他)唤起本地app
第⼀种⽅式:
通过在html的a标签⾥⾯的href中直接配置android端的scheme,当然,如果有host其他的配置,跟在后⾯就可以了,android端配置和代码如
下:
android端配置:
android:scheme="abraham"/>
注:如果这个是配置在启动页要和标签并列在⼀起,不然运⾏后⼿机app的图标会没有;注意scheme协议要⼩写,否则会有不能响应的异常!
html代码:
这⾥我们来看看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);
List
//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"));
List
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客户端
中,能唤醒。微信、新浪微博客户端、腾讯微博客户端⽆法唤醒。
代码如下:
#zjmobliestart{font-size:40px;}
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客户端、新浪微博客户端、腾讯微
博客户端⽆法唤醒。
代码如下:
#zjmobliestart{font-size:40px;}
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,常⽤第三⽅软件
更多推荐
搜狗游览器下载
发布评论