Android11应用安装未知来源的权限改动

最近开发的App需要下载安装另一个App。这就涉及到了app的安装代码。关于App的安装代码,写了不少,所以这一块觉得不是问题:

判断版本,Android8.0判断是否有未知来源安装全选,没有则打开未知来源安装权限设置界面去开启。去设置未知来源前,先缓存以下当前等待安装的apk文件路径

   public void installApkProcess(File apkFile) {if (Build.VERSION.SDK_INT >= 26) {boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();if (!hasInstallPermission) {//没有安装未知来源的权限startInstallPermissionSettingActivity();//去设置之前,先暂存一下安装包,等设置完,载安装CommonTemp.getInstance().setWaitingForInstallPermissionSettingApkFile(apkFile);return;}}installApk(apkFile);}

 打开位置来源权限设置界面

 private void startInstallPermissionSettingActivity() {Uri packageURI = Uri.parse("package:" + mContext.getPackageName());//注意这个是8.0新APIIntent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);Activity activity = AppManager.getAppManager().getTopActivity();activity.startActivityForResult(intent, 6000);}

App安装的代码

public void installApk(File apkFile) {if (apkFile == null || !apkFile.exists()) {return;}Intent intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//Android7.0Uri contentUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileprovider", apkFile);intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);intent.setDataAndType(contentUri, "application/vnd.android.package-archive");} else {// 通过Intent安装APK文件intent.setDataAndType(Uri.parse("file://" + apkFile.toString()),"application/vnd.android.package-archive");}if (mContext.getPackageManager().queryIntentActivities(intent, 0).size() > 0) {mContext.startActivity(intent);//安装完,清除缓存CommonTemp.getInstance().setWaitingForInstallPermissionSettingApkFile(null);}}

 onActivityResult种监听开启了未知来源安装权限,此时继续执行安装apk

 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (6000 == requestCode && resultCode == RESULT_OK) {//安装未知来源权限设置完成//权限设置完成,应该再次安装installApk(CommonTemp.getInstance().getWaitingForInstallPermissionSettingApkFile());}}

然而,当我在Android11的设备上运行时候,程序却发生了崩溃,原因是我打开未知来源安装设置界面后,开通权限之后,我本地刚刚缓存的apk文件名称变成空了......,有些地方没有判空导致程序崩溃了。不应该呀,平白无故为啥我的缓存变成空了?看了下日志,发现我的App进程结束后又重启了,这样本地的一些单例之类的缓存就是被清空了.......

网上百度查资料得出结论:

  • Android 11开始,Google默认情况下允许安装未知来源应用程序,只是在安装应用程序时候会给出一些警告。
  • 如果我们代码还是去打开未知来源安装的界面,点击开启未知来源安装权限后,应用程序会被结束并重启,

解决方案,在打开未知来源安装设置界面之前,需要判断下当前Android版本,如果是11或11以上,就直接安装。

所以,此处还是需要注意下,避免自己的应用程序出现不必要的bug。关于apk安装Android11之前的问题,我之前发了一篇文章Android7.0、8.0安装apk以及安装apk弹出“选择打开方式”的解决方案_手机安装apk显示用其他应用打开-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820178.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【团体程序设计天梯赛 往年关键真题 详细分析完整AC代码】L2-001 紧急救援(最短路+路径打印) L2-002 链表去重(模拟链表)

L2-001 紧急救援 最短路路径打印 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时…

C语言:文件操作(三)

目录 前言 5、文章的随机读写 5.1 fseek 5.2 ftell 5.3 rewind 结语 前言 本篇文章继续讲解文件操作,讲解文件的随机读写,主要有三个函数:fseek;ftell;rewind。 前面讲解的函数都是对文件内容进行顺序读写&#x…

win10 64位装三菱PLC软件出现oleaut32.dll拒绝访问

win10 64位装 三菱PLC软件GX works2出现以下情况:以下文件没有自注册或撤消注册 c:/Windows/SysWOW64/oleaut32.dll拒绝访问 经过百度说是兼容问题 解决方案:在安装包启动图标上右键-兼容性疑难解答-尝试建议的设置-测试程序。 点击测试程序后setup正常…

js中的节流与防抖功能

防抖功能直接上js代码 let timer; // 声明一个计时器变量// 点击抽奖事件 function even() {// 检查计时器是否存在,如果存在则清除if (timer) {clearTimeout(timer);}// 设定一个时间间隔,比如500毫秒const interval 500;// 设定一个定时器&#xff0…

C/C++ C/C++ 入门(6)模板初阶

个人主页:仍有未知等待探索-CSDN博客 专题分栏:C 多多指教! 一、泛型编程 在之前,我们进行编程的时候,总是针对于某一个具体的问题。就比如说,如何实现一个int类型的swap函数呢?大家肯定会写。…

Unity HDRP 2022 Release-Notes

🌈Unity HDRP 2022 Release-Notes 本文信息收集来自自动搜集工具👈 版本更新内容2022.3.17HDRP: Fixed a culling result sharing issue between custom passes and the camera rendering them.(UUM-53945)2022.3.17HDRP: Fixed Blackman-Harris filter…

2811: 【算法思想】【双指针】反转元音字符

题目描述 编写一个函数,该函数以字符串作为输入,并只反转字符串的元音,即将第一个元音字母与最后一个元音字母调换位置, 第二个元音字母与倒数第二个元音字母调换位置....... (注意:元音字母包括a e i o u &#xf…

【计算机网络】常用编码方式+例题(曼彻斯特编码、差分曼彻斯特编码...)

常用编码方式例题 常用编码方式练习画出四种编码20221题342015题342013题34 常用编码方式 练习 画出四种编码 20221题34 这个题目的考察是差分曼彻斯特编码。 差分曼彻斯特编码在每个码元的中间时刻电平都会发生跳变。与曼彻斯特编码不同的是:电平的跳变仅代表时钟…

【随笔】Git 基础篇 -- 拉取数据 git pull(二十八)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

2024全网最全的Postman接口自动化测试!

| 背景 该篇文章针对已经掌握 Postman 基本用法的读者,即对接口相关概念有一定了解、已经会使用 Postman 进行模拟请求的操作。 当前环境: Window 7 - 64 Postman 版本(免费版):Chrome App v5.5.3 不同版本页面 U…

java中整数的取反~

从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。 按位取反运算符~: 运算符的功能是对其操作数进行按位取反。0变1,1…

哪个品牌短袖穿着舒服?夏季舒适透气的五款短袖分享

近期很多地区的天气都开始变得热了,尤其是华南地区已经开始穿上短袖了。很多朋友都想选一些夏天穿的短袖,但是市面上的短袖品牌实在太多,看得大家眼花缭乱难以选择,而且还有不少质量差的短袖混杂在其中。 基于我对多个品牌的测评以…

python-pytorch实现lstm模型预测中文文本输出0.1.02

python-pytorch实现lstm模型预测中文文本输出0.1.02 数据参考效果分词到数组获取word2index和word2index查看频次获取vacab生成训练数据训练测试连续预测 记录 2024年4月14日15:36:28----0.1.02 有问题还需要完善,会重复生成一句话 数据 一篇新闻:http…

[数据结构]—二叉树基本概念

1.树概念及结构 1.树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点&#xff…

20240412-算法复习打卡day52||● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

300.最长递增子序列 从前往后遍历即可 class Solution { public:int lengthOfLIS(vector<int>& nums) {if (nums.size() < 1) return nums.size();vector<int> dp(nums.size(), 1);int result 0;for (int i 1; i < nums.size(); i) {for (int j 0; …

VS 2022部署HoloLens2 error: DEP0600: Deployment failed

一、报错信息 VS 2022 HoloLens 2 Deploy error: DEP0600: Deployment failed. Failed to deploy through new deployment pipeline 二、其它情况说明 1、设备和电脑处于同一网关&#xff0c;且已经联网 2、电脑从web可以访问HoloLens2设备 三、治病方法 在holoLens2上&am…

优秀文章收藏

&#xff08;一&#xff09;DirectUI 作者 Bjarke Viksoe 个人网站&#xff1a; DirectUI 作者 Bjarke Viksoe 个人网站&#xff1a;viksoe.dk - viksoe.dk 比较著名的文章&#xff0c;DirectUI思想做的一个程序&#xff1a;viksoe.dk - UI: Become windowless 还有一个自己…

Flutter问题:本地第三方库与pubspec.lock中的版本不同

问题前景&#xff1a; 不知道为什么flutter项目中的某几个包突然出现问题&#xff0c;提示出错&#xff0c;而本地第三方库与 pubspec.lock和pubspec.yaml 中的版本不同 搜索了一下&#xff0c;是因为我在添加这几个包时都在前面添加了 ^ 符 date_format: ^2.0.4 pubspec.lo…

适合 Python 入门的 8 款强大工具

Python是一种开源的编程语言&#xff0c;可用于Web编程、数据科学、人工智能以及许多科学应用。学习Python可以让程序员专注于解决问题&#xff0c;而不是语法。由于Python相对较小&#xff0c;且拥有各式各样的工具&#xff0c;因此比Java和C等语言更具优势&#xff0c;同时丰…

Fiddler工具的操作和功能时-----定位到步骤图(助力抓包)

前言&#xff1a; 继续上一篇&#xff0c;已经对fiddler的安装、配置和代理的问题进行了讲解&#xff1a; Fiddle配置代理&#xff0c;保手机模拟器访问外部网络-CSDN博客 本章&#xff0c;讲对一些fiddler的操作进行一系列讲解&#xff01;Fiddler作为一款网络调试工具&…