Apk安装

Android11之前可通过 Intent.ACTION_INSTALL_PACKAGE 进行传递Apk的URI进行安装

但是在Android11版本 Intent.ACTION_INSTALL_PACKAGE 已标注弃用

同时推荐在Android5版本提供的PackageInstaller类进行安装

兼容到Android5.0

PackageInstaller

先看看该类的使用流程

Android Apk 安装.jpg

额外提示

通过该方式,不需要主动去申请App内安装Apk权限,PackageInstaller内置了该申请

代码实现

注意 该类启动模式为 栈顶单例

同时需配备一个 intent-filter

//注意 该类启动模式为 栈顶单例

class InstallActivity : AppCompatActivity() {

//intent-filter 的 action

private val ACTION_INSTALL = "cc.xiaobaicz.work.INSTALL_APK"

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

install()

}

/**

* 安装

*/

private fun install() {

packageManager.packageInstaller.apply {

//生成参数

val params = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)

//创建ID

val id = createSession(params)

//打开Session

val session = openSession(id)

//写入文件

writeAssetsApk2Session(session, "pbox.apk")

//新建IntentSender

val intent = createIntentSender()

//提交,进行安装

session.commit(intent)

}

}

/**

* 新建一个IntentSender用于接收结果

* 该例子通过当前页面接收

*/

private fun createIntentSender(): IntentSender {

val intent = Intent(this, MainActivity::class.java).apply {

action = ACTION_INSTALL

}

val pending = PendingIntent.getActivity(this, 0, intent, 0)

return pending.intentSender

}

//写入Apk到Session输出流,该例子 获取Assets内文件,可通过其他方式获取Apk流

private fun writeAssetsApk2Session(session: PackageInstaller.Session, s: String) {

assets.open(s).use { input ->

session.openWrite("apk", 0, -1).use { output ->

output.write(input.readBytes())

}

}

}

/**

* 接收安装结果

*/

override fun onNewIntent(intent: Intent?) {

super.onNewIntent(intent)

intent ?: return

if (intent.action != ACTION_INSTALL) {

return

}

intent.extras?.apply {

when (this.getInt(PackageInstaller.EXTRA_STATUS)) {

PackageInstaller.STATUS_PENDING_USER_ACTION -> {

//提示用户进行安装

startActivity(this.get(Intent.EXTRA_INTENT) as Intent)

}

PackageInstaller.STATUS_SUCCESS -> {

//安装成功

}

else -> {

//失败信息

val msg = this.getString(PackageInstaller.EXTRA_STATUS_MESSAGE)

}

}

}

}

}

android11安装第三方,Android Apk安装(兼容Android11 Api30)相关推荐

  1. 一文看懂Android APK安装的原理

    一文看懂Android APK安装的原理 前言 APK包的构成 安装APK 总结 前言 大家有没有想过一个应用的APK是怎么被安装到安卓手机上的,安装的本质是什么?我们知道,Windows应用程序的安 ...

  2. Android apk安装过程

    Android安装包.APK是类似Symbian Sis或Sisx的文件格式.通过将APK文件直接传到Android模拟器或Android手机中执行即可安装. Android应用安装有如下四种方式 1 ...

  3. Android APK安装失败错误代码含义

    Android APK安装失败错误代码含义 名称 value 描述 INSTALL_FAILED_ALREADY_EXISTS -1 已经安装 INSTALL_FAILED_INVALID_APK - ...

  4. android apk安装工具,APK安装器下载-APK安装器手机版下载v2.9-1 安卓版-西西软件下载...

    APK安装器取代手机当中自带的APK安装器,让安装的界面在整体上面变得更加的好看,对于颜值有着极高要求的用户而言,虽然安装界面我们不一定能够经常的进行看到,但是界面的丑美也非常影响感官体验,感兴趣的话 ...

  5. PyCharm怎么安装第三方库? Pycharm安装python库的技巧

    提示:PyCharm怎么安装第三方库?python中经常需要安装第三方库,安装的方法也有很多,今天我们就来看看使用Pycharm安装python库的技巧,详细请看下文 文章目录 前言 一.首先打开py ...

  6. android apk 安装流程

    android系统中存在一个特殊的区域,在开机的时候,加载这块区域的信息,通过系统扫描这块区域,把对应的内容加载都内存中去,每个安装一个新的应用,就会重新更新此区域,这样就能保持最新的状态,这就是为什 ...

  7. android 安装多个apk,Android apk 安装相关的几个目录

    一.几个关键目录 1./data/local/tmp /data/local/tmp 目录是转为android studio 安装应用程序保留的目录 android studio 安装apk时 首先将 ...

  8. 【SealDEV 倾情奉献】Android APK 安装过程详解

    开发 Android 应用后,一般都会安装到手机上去运行,了解应用是如何安装到手机上的,可以更好的理解应用的本质,理解应用是如何运行的,在自己开发的应用遇到一些问题时,会从更深层次去分析,快速定位找到 ...

  9. 谷歌 G1 android APK安装器 离线安装软件

    网友在购买Android手机时会发现T-Mobile G1自带了根USB转ExtUSB的数据线,但是并没有提供提供驱动光盘.Android手机网发现Google已经做好了G1的Windows版USB驱 ...

最新文章

  1. 临沂机器人火锅_临沂知名智能无人火锅前景
  2. node.js koa 实现长轮询
  3. C#中判断空字符串的3种方法性能分析
  4. 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)
  5. c primer plus(第五版)读书笔计 第二章(3)
  6. 小猿圈Java学习之通过命令行设置属性值
  7. html日历显示不完整,求html代码,显示日历和时间的代码
  8. 使用 VMControl 2.4 实现多网络的 Power 服务器捕捉和系统部署
  9. PPT(十)-动画基础知识学习
  10. Unity3d官方测试插件学习-单元测试,集成测试
  11. markdown编辑数学公式
  12. 长尾关键词是什么意思?如何使用5118挖掘和下载长尾词?
  13. AAAI2021联邦学习论文集
  14. 香橙派借助语音模块实现语音刷抖音
  15. python文件批量改名
  16. 【Matlab】求解微分方程{上}(通解和特解)
  17. 2022年小额贷款行业研究报告
  18. 首个可用于深度学习的ToF相关数据集——基于置信度的立体相机以及ToF相机深度图融合框架
  19. 直流亥姆霍兹线圈和交流亥姆霍兹线圈的区别
  20. Django的models无法生成新加的表

热门文章

  1. 关于阿里云服务器可以怎么选择地域
  2. PCB设计之EMC 47原则
  3. oracle library is not loaded解决方法
  4. 鲁宾逊非标准微积分与国内高等数学“秀肌肉”
  5. 常州刘国钧计算机专业,2020常州刘国钧高等职业技术学校的录取分数线
  6. python在数据分析方面的应用-数据分析应用方面Python和spss有什么区别?
  7. mysql rpm怎么用_linux下mysql(rpm)安装使用手册
  8. Nginx+Tomcat负载均衡和动静分离理论实操详解来袭!
  9. 利用自识别标记实现复杂场景下相机标定
  10. 怎么修改图片的kb大小?如何缩小照片kb?