一、问题描述:

在 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相关推荐

  1. android删除打开方式,Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)...

    Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...

  2. android通知栏打开actvity,Android实现点击通知栏后,先启动应用再打开目标Activity...

    情况简述 app正在运行 app已退出 方案和思路 SplashActivity 用于显示app大图,同时进行用户登录等操作,服务器返回数据后跳转到MainActivity. MainActivity ...

  3. android 如何打开s3db,Android开发教程:使用已有的SQL数据库

    极品好儿媳全文阅读,燃料乙醇放量,嘉兴办公家具,应向阳,58会展网,证书挂靠,鱼缸清洗,qq蜡笔小新头像 我在sqliteadmin 创建好数据库StuDB,里面的表如下: 650) this.wid ...

  4. android 代码打开权限,android开发权限询问的示例代码

    现在基于信息安全问题,特别是版本是23以上权限越严格. 特别是拍照,读,写权限 一般权限允许过,下次就不用询问了的,所以很多应用都喜欢在首页或者启动页直接询问,不允许的就用不了1.下面给出封装好的类, ...

  5. android第三方打开文件,Android第三方文件选择器aFileChooser使用方法详解

    aFileChooser是android平台上的一个第三方文件选择器,其在github上的项目主页是:https://github.com/iPaulPro/aFileChooser aFileCho ...

  6. android莫名其妙打开支付宝,【未解决】用uiautomator2实现安卓手机打开支付宝自动收集蚂蚁森林能量...

    折腾: [调研]支付宝 蚂蚁森林 自动收集 期间,自己的小米9的安卓10手机,无法用前面调用的各种方式去实现自动手机蚂蚁森林能量 看来只能自己去写代码去实现了. 去搭建uiautomator2的pyt ...

  7. android webview打开相册,Android webView不能响应h5打开相册的操作

    做android聊天时,遇到过一个问题,h5的页面发送的图片在android端不能响应,ios那边一路畅通.也是相当无奈,目前发现了好多android端与ios端webView的异同. android ...

  8. android代码打开数据库,Android打开和关闭数据库

    与计算机编程中的许多事情一样,关闭SQLite数据库的时间没有单一的"正确进行"(如果您正在使用它,则通过SQLiteOpenHelper上的close(),否则对SQLiteDa ...

  9. android代码打开数据库,android – 如何正确关闭并重新打开Room数据库

    您好我有2个应用程序依赖于制作和恢复应用程序数据库的备份,只需将数据库文件复制到SD卡中,然后很难确定如何在关闭它之后重新打开Room Database单例以创建数据库'副本. 构建数据库: @Dat ...

最新文章

  1. VS 2005 Debugger crashing with IE 8
  2. iOS 下配置XMPP 服务器openfire详解
  3. 网络营销——网络营销专员到底是教你如何选择网站页面制作
  4. 测试教程网.unittest教程.7. 各种断言方法
  5. linux内核的I2C子系统详解5——i2c_driver的注册、i2c_client的来源
  6. python tkinter图片为什么要设置全局变量_为什么这里一定要设置全局变量
  7. 与时间赛跑:微盟的数据恢复为什么需要这么长时间
  8. 【OpenCV】OpenCV实战从入门到精通之 -- 输入输出XML和YAML文件详解
  9. 中文版orgin图像数字化工具_GetData Graph Digitizer(图表数字化工具) V2.25 官方版
  10. 学习语文必须掌握的知识点思维导图
  11. vscode下载很慢问题处理
  12. 微带天线馈电方法 [搬运]
  13. [从头读历史] 第276节 诗经 陈风
  14. 模块化编辑器综合评测:Craft、Notion、FlowUs
  15. 基于51的单片机GPS定位系统设计
  16. 谷歌Pixel 4神奇在哪儿? AI黑科技带来四大改变!
  17. 广州集体户口办结婚证实播(各种办证难)
  18. java实现自举_实现语言的自举 - 沙枣的个人空间 - OSCHINA - 中文开源技术交流社区...
  19. 孕妇php是什么意思,关于孕妇
  20. 让领导不好拒绝的请假理由,你准备好了吗

热门文章

  1. “未知攻,焉知防”,业务安全的攻防之道
  2. android接口的使用,Android - 接口、MVP 的使用心得
  3. Deep Multimodal Subspace Clustering Networks
  4. (python)用户输入一段英文,然后输出这段英文中所有长度为3的英文单词
  5. 冰雪复古鸿蒙碎片哪里爆,冰雪传奇:稀有材料道具掉落较多的地图是哪些?
  6. 小技巧 - 怎样屏蔽群消息(包括 @全体成员)?
  7. 刘德华重庆演唱会场外
  8. 装机步骤(三)---补充跳线!!!
  9. 强烈推荐:一个比 Nginx 功能更强大的 Web 服务器
  10. 异丙醇的解吸特性和 IPA 蒸汽干燥硅晶片中的水分