目录

问题

实现

排查思路

知识拓展

包可见性

scheme

targetsdkVersion


  • 问题

App A的Activity A通过scheme跳转至App B的Activity B,跳转失败。

  • 实现

1. App A和App B约定scheme。App A跳转代码如下:

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("appb://targetactivity/web?url=XXX"));
//发出 Intent 之前必须通过 resolveActivity 检查,避免找不到合适的调用组件,造成 ActivityNotFoundException 的异常
if (getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_
ONLY) != null) { mContext.startActivityForResult(intent, 0);
}else { // 找不到指定的 Activity
}

2. 在App B承接的Activity中注册intent-filter。App B承接代码如下:

<activity android:name=".MainActivity"android:launchMode="singleTop"><intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><dataandroid:host="targetactivity"android:scheme="appb" /></intent-filter>
</activity>
  • 排查思路

上述代码在相关机型上未跳转成功,测试数款机型,发现只有android11及以上机型存在问题,故而怀疑是android11的隐私权和安全性更严格导致的。

查阅官网Android 11 中的软件包可见性和管理软件包可见性,我们发现:如果您的应用以 Android 11(API 级别 30)或更高版本为目标平台,并且需要与应用(自动可见的应用除外)交互,请在您应用的清单文件中添加 <queries> 元素。

换而言之,当你不加<queries>元素 ,targetSDKVersion为30及以上且手机是android11及以上是无法跳转的。

App A中注册以下代码即可解决。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.XXX.myapp"><uses-permission android:name="android.permission.INTERNET" /><queries><intent><action android:name="android.intent.action.VIEW"/><dataandroid:host = "targetactivity"android:scheme = "appb"/></intent></queries><application<!--XXXX--></application></manifest>
  • 知识拓展

  • 包可见性

Android 11 更改了应用查询用户已在设备上安装的其他应用以及与之交互的方式。使用<queries> 元素,应用可以定义一组自身可访问的其他软件包。通过告知系统应向您的应用显示哪些其他软件包,此元素有助于鼓励最小权限原则。参考:Android 11 中的软件包可见性和管理软件包可见性。

  • scheme

一个完整的完整的URL Scheme协议格式由scheme、host、port、path和query组成,其结构如下所示:

<scheme>://<host>:<port>/<path>?<query>

scheme可以是常见的协议名 (http、file等)也可以是自定义的协议名(自定义一个字符串即可),一般打开一个APP,大多使用自定义的协议名。参考:Android URL Scheme。

  • targetsdkVersion

Android 会随新版本的推出而逐渐发展,在此过程中,某些行为乃至外观可能会发生变化。不过,如果平台的 API 级别高于应用 targetSdkVersion 所声明的版本,系统便可通过启用兼容性行为,确保应用继续以您所期望的方式工作。您可以将 targetSdkVersion 指定为符合应用所运行平台的 API 级别,从而停用此类兼容性行为。参考:<uses-sdk>。

Android URL scheme跳转失败(源码实现排查思路知识拓展)相关推荐

  1. android url scheme 跳转传值,如何自定义 URL Scheme 进行跳转

    一.URL Scheme 简介和作用 在 :// 之前的部分就称为 URL Scheme. 也就是说 http://www.jianshu.com/ 的 URL Scheme 就是 http . 更多 ...

  2. Android Jetpack组件之Navigation使用-源码

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  3. 【Android 启动过程】Activity 启动源码分析 ( ActivityThread 流程分析 二 )

    文章目录 前言 一.ActivityManagerService.attachApplicationLocked 二.ActivityStackSupervisor.attachApplication ...

  4. 【Android 启动过程】Activity 启动源码分析 ( AMS -> ActivityThread、AMS 线程阶段 二 )

    文章目录 前言 一.热启动与冷启动选择 二.AMS 进程中执行的相关操作 三.通过 Binder 机制转到 ActivityThread 中执行的操作 总结 前言 上一篇博客 [Android 启动过 ...

  5. Android一个漂亮的日历组件源码

    简介: Android 一个漂亮的日历组件源码主要特性 日历样式完全自定义,拓展性强 左右滑动切换上下周月,上下滑动切换周月模式 抽屉式周月切换效果 标记指定日期(marker) 跳转到指定日期 下载 ...

  6. Android高版本P/Q/R源码编译指南

           Android高版本P/Q/R源码编译指南 Android源码编译系列博客: Android.bp你真的了解吗 Android.bp入门指南之Android.mk转换成Android.b ...

  7. 基于Android+servlet的宠物商店【源码+文档+ppt】

    目录 1.文档目录 1.课题研究目的 2.开发技术 2.1 Android技术 2.2 servlet 3.需求分析 3.1 系统模型 3.2 系统用例图 3.3 顶层数据流图 3.4 零层数据流图 ...

  8. Android技术栈--HashMap和ArrayMap源码解析

    1 总览 WARNING!!:本文字数较多,内容较为完整并且部分内容难度较大,阅读本文需要较长时间,建议读者分段并耐心阅读. 本文会对 Android 中常用的数据结构进行源码解析,包括 HashMa ...

  9. java音频源码,Android Java实时音频SDK示例源码下载 - 开发者中心 - ZEGO即构科技

    示例源码 本地下载 本地下载 GitHub下载 说明 示例代码运行指引 1 准备环境 在开始集成 ZEGO Express SDK 前,请确保开发环境满足以下要求(以下说明皆以 macOS 开发电脑为 ...

最新文章

  1. android edittext 默认不获取焦点
  2. 20201014 《人工智能与大数据》第1节课 笔记
  3. Conputer Vision-边缘检测-OpenCV实践
  4. data structure begin!!
  5. Delphi DLL制作和加载 Static, Dynamic, Delayed 以及 Shared-Memory Manager
  6. 【线上分享】视频直播与远程会议中的AI关键技术应用及创新
  7. es6 --- Promise.all等待多个异步任务执行
  8. 解决:[ERROR] Error executing Maven. [ERROR] 1 problem was encountered while building the effective set
  9. [2020-ECCV]PIPAL-a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration论文简析
  10. PhoneGap搭建运行环境(3.2版本)
  11. 2021年 考研数学一 第17题
  12. 02129 信息资源建设《信息资源管理(第2版) 电子工业出版社 肖明著》考点整理
  13. mod sim tcp配置_ModSim32和ModScan32两种Modbus调试工具使用说明
  14. 点击a标签实现下载文件
  15. 西游记不单单讲的是故事(2) ------ 摘自 吴闲云的《煮酒探西游》
  16. linux下ssh下载命令,SSH 登录工具常用命令
  17. HCK哈士奇x可口可乐联名潮酷冰吧,你还没入手吗?
  18. 建站百科|网站Banner风格、样式大解析
  19. Xcode6的新特性、
  20. Fantastic-Matplotlib 第二回

热门文章

  1. 机器学习中对数据集进行拆分及模型训练
  2. 一些个人常用的网站网址
  3. 单点登录(SSO)解决方案介绍
  4. 雷电模拟器一键宏实现循环点击
  5. 图像处理:均值滤波算法
  6. Hystrix学习(2)雪崩效应
  7. 图片的分辨率大于设备分辨率或者小于设备的分辨率的显示问题
  8. Linux重启命令shutdown与reboot
  9. java推算日期后天_分别用C++和Java写的计算后天的日期code
  10. java中文转换数字_Java 中文数字转换为阿拉伯数字