android莫名其妙打开支付宝,Android 7.0 无法拉起支付宝App
一、问题描述:
在 Android 7.0 和使用腾讯 X5 浏览器内核的 **WebView **上,无法拉起支付宝。而在之前版本的 WebView 上不存在。
支付宝平台上有相关提问:
Android 7.0 的 WebView 无法调起支付宝
二、问题原因:
跳转支付宝一般打开一个支付宝提供的一个官方页面,
例如:
这时候 WebView 上会加载支付宝的下载页,并且刚才那个页面会加载一个唤醒支付宝的 **intent **协议。
例如:
而目前的 Android 7.0 上的系统 WebView 内核和腾讯的 X5 浏览器内核不能发出 intent 协议。导致不能唤醒支付宝!其他使用 intent 协议唤醒第三方App的都会出现这种情况!
三、解决方案:
在我们打开支付宝提供的官方页面时, URL 中包含了 Scheme 参数,所以我们可以通过截取 Scheme 参数利用 Scheme 协议唤醒支付宝。
示例代码:
public static boolean skipScheme(Context context, String newurl){
if(TextUtils.isEmpty(newurl) || !newurl.contains("scheme")){
return false;
}
MyLogUtil.LogI("yxx","skipScheme处理自定义scheme-->" + newurl);
DealedUrl dealedUrl = dealUrl(newurl);
final String finalParams = dealedUrl.params;
if(TextUtils.isEmpty(finalParams))return false;
TreeMap treeMap = getMapFromString(finalParams);
if(!treeMap.containsKey("scheme"))return false;
String schemeUrl = treeMap.get("scheme");
try {
schemeUrl = URLDecoder.decode(schemeUrl,"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
// 以下固定写法
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(schemeUrl));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
List resolves = context.getPackageManager().queryIntentActivities(intent,0);
if(resolves.size()>0){
((Activity)context).startActivityIfNeeded(intent, -1);
}
} catch (Exception e) {
// 防止没有安装的情况
e.printStackTrace();
return false;
}
return true;
}
相关工具代码:
public static class DealedUrl {
public String url;
public String params;
}
public static DealedUrl dealUrl(String url) {
DealedUrl dealedUrl = new DealedUrl();
if (!url.contains("?")) {
dealedUrl.url = url;
dealedUrl.params = "";
return dealedUrl;
}
String params = url.substring(url.indexOf("?") + 1);
dealedUrl.url = url.substring(0, url.indexOf("?"));
String[] results = params.split("&");
StringBuilder specialParams = new StringBuilder();//该url特有参数
for (String str : results) {
if (str.split("=").length != 2) {
continue;
}
String key = str.split("=")[0];
specialParams.append(str).append("&");
}
if (specialParams.length() > 0) {
specialParams.deleteCharAt(specialParams.length() - 1);
}
dealedUrl.params = specialParams.toString();
return dealedUrl;
}
public static TreeMap getMapFromString(String data) {
TreeMap reqMap = new TreeMap<>();
if (TextUtils.isEmpty(data)) {
return reqMap;
}
String[] array = data.split("&");
for (String entry : array) {
String[] parts = entry.split("=");
if (parts.length < 2) {
continue;
}
reqMap.put(parts[0], parts[1]);
}
return reqMap;
}
android莫名其妙打开支付宝,Android 7.0 无法拉起支付宝App相关推荐
- android删除打开方式,Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)...
Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...
- android通知栏打开actvity,Android实现点击通知栏后,先启动应用再打开目标Activity...
情况简述 app正在运行 app已退出 方案和思路 SplashActivity 用于显示app大图,同时进行用户登录等操作,服务器返回数据后跳转到MainActivity. MainActivity ...
- android 如何打开s3db,Android开发教程:使用已有的SQL数据库
极品好儿媳全文阅读,燃料乙醇放量,嘉兴办公家具,应向阳,58会展网,证书挂靠,鱼缸清洗,qq蜡笔小新头像 我在sqliteadmin 创建好数据库StuDB,里面的表如下: 650) this.wid ...
- android 代码打开权限,android开发权限询问的示例代码
现在基于信息安全问题,特别是版本是23以上权限越严格. 特别是拍照,读,写权限 一般权限允许过,下次就不用询问了的,所以很多应用都喜欢在首页或者启动页直接询问,不允许的就用不了1.下面给出封装好的类, ...
- android第三方打开文件,Android第三方文件选择器aFileChooser使用方法详解
aFileChooser是android平台上的一个第三方文件选择器,其在github上的项目主页是:https://github.com/iPaulPro/aFileChooser aFileCho ...
- android莫名其妙打开支付宝,【未解决】用uiautomator2实现安卓手机打开支付宝自动收集蚂蚁森林能量...
折腾: [调研]支付宝 蚂蚁森林 自动收集 期间,自己的小米9的安卓10手机,无法用前面调用的各种方式去实现自动手机蚂蚁森林能量 看来只能自己去写代码去实现了. 去搭建uiautomator2的pyt ...
- android webview打开相册,Android webView不能响应h5打开相册的操作
做android聊天时,遇到过一个问题,h5的页面发送的图片在android端不能响应,ios那边一路畅通.也是相当无奈,目前发现了好多android端与ios端webView的异同. android ...
- android代码打开数据库,Android打开和关闭数据库
与计算机编程中的许多事情一样,关闭SQLite数据库的时间没有单一的"正确进行"(如果您正在使用它,则通过SQLiteOpenHelper上的close(),否则对SQLiteDa ...
- android代码打开数据库,android – 如何正确关闭并重新打开Room数据库
您好我有2个应用程序依赖于制作和恢复应用程序数据库的备份,只需将数据库文件复制到SD卡中,然后很难确定如何在关闭它之后重新打开Room Database单例以创建数据库'副本. 构建数据库: @Dat ...
最新文章
- VS 2005 Debugger crashing with IE 8
- iOS 下配置XMPP 服务器openfire详解
- 网络营销——网络营销专员到底是教你如何选择网站页面制作
- 测试教程网.unittest教程.7. 各种断言方法
- linux内核的I2C子系统详解5——i2c_driver的注册、i2c_client的来源
- python tkinter图片为什么要设置全局变量_为什么这里一定要设置全局变量
- 与时间赛跑:微盟的数据恢复为什么需要这么长时间
- 【OpenCV】OpenCV实战从入门到精通之 -- 输入输出XML和YAML文件详解
- 中文版orgin图像数字化工具_GetData Graph Digitizer(图表数字化工具) V2.25 官方版
- 学习语文必须掌握的知识点思维导图
- vscode下载很慢问题处理
- 微带天线馈电方法 [搬运]
- [从头读历史] 第276节 诗经 陈风
- 模块化编辑器综合评测:Craft、Notion、FlowUs
- 基于51的单片机GPS定位系统设计
- 谷歌Pixel 4神奇在哪儿? AI黑科技带来四大改变!
- 广州集体户口办结婚证实播(各种办证难)
- java实现自举_实现语言的自举 - 沙枣的个人空间 - OSCHINA - 中文开源技术交流社区...
- 孕妇php是什么意思,关于孕妇
- 让领导不好拒绝的请假理由,你准备好了吗
热门文章
- “未知攻,焉知防”,业务安全的攻防之道
- android接口的使用,Android - 接口、MVP 的使用心得
- Deep Multimodal Subspace Clustering Networks
- (python)用户输入一段英文,然后输出这段英文中所有长度为3的英文单词
- 冰雪复古鸿蒙碎片哪里爆,冰雪传奇:稀有材料道具掉落较多的地图是哪些?
- 小技巧 - 怎样屏蔽群消息(包括 @全体成员)?
- 刘德华重庆演唱会场外
- 装机步骤(三)---补充跳线!!!
- 强烈推荐:一个比 Nginx 功能更强大的 Web 服务器
- 异丙醇的解吸特性和 IPA 蒸汽干燥硅晶片中的水分