本文只针对调用PackageInstaller安装流程,ROM中有时需要集成一些第三方的应用商城或着launcher,但需要此应用可能具有安装权限,像大部分机顶盒设备,投影设备禁止安装未知来源的控制对用户是不可见的,功能很简单直接贴代码;

PackageInstallerActivity中有个checkIfAllowedAndInitiateInstall()函数来判断是否允许安装,允许的话会调用initiateInstall()弹出安装应用的界面,禁止安装未知来源的应用时会弹出禁止安装未知来源的dialog;

PackageInstallerActivity中有个变量mOriginatingPackage,此变量就是调用安装应用事件的应用的包名,只需在initiateInstall()的if判断中加入自己的判断逻辑即可。

/**
*检查是否允许安装包,如果允许,则启动安装。如果不允许
*显示相应的对话框。
*/private void checkIfAllowedAndInitiateInstall() {// Check for install apps user restriction first.final int installAppsRestrictionSource = mUserManager.getUserRestrictionSource(UserManager.DISALLOW_INSTALL_APPS, Process.myUserHandle());if ((installAppsRestrictionSource & UserManager.RESTRICTION_SOURCE_SYSTEM) != 0) {showDialogInner(DLG_INSTALL_APPS_RESTRICTED_FOR_USER);return;} else if (installAppsRestrictionSource != UserManager.RESTRICTION_NOT_SET) {startActivity(new Intent(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS));finish();return;}//看这里的判断条件1.允许安装未知来源应用 2.非未知来源应用发起的安装事件//3.这是我加的逻辑if (mAllowUnknownSources || !isInstallRequestFromUnknownSource(getIntent()) || new StmConfig().isUserCustomAllowInstallPkg(mOriginatingPackage)) {initiateInstall();} else {// Check for unknown sources restrictionfinal int unknownSourcesRestrictionSource = mUserManager.getUserRestrictionSource(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES, Process.myUserHandle());if ((unknownSourcesRestrictionSource & UserManager.RESTRICTION_SOURCE_SYSTEM) != 0) {showDialogInner(DLG_UNKNOWN_SOURCES_RESTRICTED_FOR_USER);} else if (unknownSourcesRestrictionSource != UserManager.RESTRICTION_NOT_SET) {startActivity(new Intent(Settings.ACTION_SHOW_ADMIN_SUPPORT_DETAILS));finish();} else {handleUnknownSources();}}}

Android允许应用具有安装权限相关推荐

  1. Android无法安装apk,8.0未知来源应用安装权限

    Android 新版本的出现 ,适配Android8.0未知来源应用安装权限处理 1.在清单文件中增加请求安装权限 <uses-permission android:name="and ...

  2. android studio自动设置权限,android studio打包,安装后权限都没有默认打开,如何设置打开?...

    android studio打包,安装后权限都没有默认打开,如何设置打开?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ...

  3. Android 开发 之 8.0应用安装权限(未知应用权限安装)

    未知来源应用权限 Android8.0的诸多新特性中有一个非常重要的特性:未知来源应用权限 以前安装未知来源应用的时候一般会弹出一个弹窗让用户去设置允许还是拒绝,并且设置为允许之后,所有的未知来源的应 ...

  4. android 添加安装权限白名单

    点击打开链接 有些项目不允许所有APK都拥有安装权限,例如apk只能通过应用商城来安装或者升级,只允许某些特定的apk自升级,不允许pm install等.这就需要添加安装权限白名单来控制. 1.pa ...

  5. Android 11.0 系统默认授予app安装权限(去掉app首次运行时权限授权弹窗)

    目录 1.概述 2.系统默认授予app安装权限去掉app首次运行时权限授权弹窗功能分析

  6. Android 在运行时请求权限

    2019独角兽企业重金招聘Python工程师标准>>> 从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予.此方法可以简化 ...

  7. 关于android 1.6全部的权限介绍

    原文:关于android 1.6全部的权限介绍 我们在 AndroidManifest.xml里需要对一些软件需要的操作做一些权限的声明, 比如我们的软件有发送短信的功能,那么就需要在 Android ...

  8. 【Android 逆向】应用安装目录 ( Android 应用的默认安装目录 | 查找 Android 应用的安装目录 | 查询当前正在运行的应用包名 | 根据包名查询应用安装路径 )

    文章目录 一.Android 应用的默认安装目录 二.查找 Android 应用的安装目录 1.查询当前正在运行的应用包名 2.根据包名查询应用安装路径 一.Android 应用的默认安装目录 应用安 ...

  9. Android 8.0 运行时权限策略变化和适配方案

    Android8.0也就是Android O即将要发布了,有很多新特性,目前我们可以通过AndroidStudio3.0 Canary版本下载Android O最新的系统映像的Developer Pr ...

最新文章

  1. 0501 0503 模块区别_apollo介绍之planning模块(四)
  2. [Android疑难杂症]动态改变Background后Padding无效的问题
  3. SSI注入(server side includes injection 服务器端包含注入)
  4. Hadoop基于Shell命令与底层Unix操作系统的交互
  5. Chapter 7:Statistical-Model-Based Methods
  6. Leetcode动态规划 不同路径
  7. java 二进制 归属权限_【Java EE 学习 75 上】【数据采集系统第七天】【二进制运算实现权限管理】【权限分析和设计】...
  8. Spring AOP两种使用方式以及如何使用解析
  9. uniapp对象怎么获取值_原理 | 怎么获取PMSM电机转子位置Offset值
  10. 创建简单的静态库和动态库
  11. 【drawio笔记】为Confluence Cloud使用自定义字体
  12. android使用cpu软解,Android 使用自带的MediaCodec 框架进行本地视频压缩,速度嗖嗖的,亲测有效!!!...
  13. Spring和MyBatis框架整合的小案例
  14. 北京已开通5G基站6324个,年内目标建设超1万个5G基站
  15. [ZZ] 为什么中国目前仍然没有一流的三维动画电影
  16. jeecms常见用法
  17. [Cnbeta]企业与家用无线路由器的区别
  18. Python OpenCV3 计算机视觉秘籍:1~5
  19. [附源码]Python计算机毕业设计SSM绩效考核管理系统(程序+LW)
  20. IP欺骗种类有哪些?

热门文章

  1. 点猫科技与Aqara绿米达成战略合作,助推校内人工智能教育普及
  2. JAVA新生入学报到管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  3. 编译原理(三)语法分析:3.二义性与二义性的消除
  4. SATA、AHCI、ATA等相关知识概述(基本概念)
  5. 金庸《倚天屠龙记》中的一个瑕疵
  6. 斐波那契数列之不死神兔
  7. 机器人史宾_史宾机器人:重启
  8. 怎么查服务器域名 mac系统,苹果6s肿么查看服务器域名
  9. WIN11添加我的电脑图标等的方法
  10. Kotlin:所有的一切还是从Hello Kotlin开始