【Android智能硬件开发】【004】通过PackageInstaller静默安装apk
前言
智能硬件不同于普通手机,大多是无人值守的,所以升级时只能采用静默升级,即后台自动升级的方式
PackageInstaller是安卓系统底层用于apk安装的管理类,只有系统级别的应用,才能使用这个类的功能
关于如何将APK升级为系统应用,我们在上篇博客中已经讲解过了
静默安装apk
apkFile是apk文件相当于存储卡根目录的路径
packageName是要安装的apk的包名
安装apk代码
//静默升级APP@SneakyThrowspublic void silenceInstall(String apkFile, String packageName) {//写入APK到InstallerSessionPackageInstaller installer = activity.getPackageManager().getPackageInstaller();PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL);int sessionId = installer.createSession(params);PackageInstaller.Session session = installer.openSession(sessionId);writeApkToSession(session, apkFile, packageName);//安装APKIntent intent = new Intent(activity, HomeActivity.class);intent.setAction("com.android.package.installer.session.PACKAGE_INSTALLED");PendingIntent pendingIntent = PendingIntent.getActivity(activity, 0, intent, 0);IntentSender sender = pendingIntent.getIntentSender();session.commit(sender);}//写入APK到InstallerSession@SneakyThrowsprotected void writeApkToSession(PackageInstaller.Session session, String apkFile, String packageName) {String file = AndroidFile.getAndroidExternalFile(apkFile);OutputStream os = session.openWrite(packageName, 0, -1);InputStream is = new FileInputStream(file);byte[] buffer = new byte[1024 * 1024];int len;while ((len = is.read(buffer)) >= 0)os.write(buffer, 0, len);os.flush();os.close();is.close();}
调用代码
//调用WorkThread.post(() -> {handler2.silenceInstall("222.apk", "com.tencent.qqpinyin");});
安装回调,安装需要一段时间,由于是静默安装,看不到任何界面,请耐心等待
@Overrideprotected void onNewIntent(Intent intent) {String action = intent.getAction();Bundle extras = intent.getExtras();if ("com.android.package.installer.session.PACKAGE_INSTALLED".equals(action)) {int status = extras.getInt(PackageInstaller.EXTRA_STATUS);boolean success = status == PackageInstaller.STATUS_SUCCESS;TipBox.tipInCenter(success ? "静默安装成功" : "静默安装失败");}}
之所以能触发此回调,是因为我们在安装的Intent中,设置了对应的Action
只要我们Activity的Action与之相匹配,就可以被该Action调用打开
<activityandroid:name="com.android.app.hardware.biz_activity.HomeActivity"android:launchMode="singleInstance"android:screenOrientation="landscape"><intent-filter><action android:name="android.intent.action.MAIN" /><action android:name="com.android.package.installer.session.PACKAGE_INSTALLED" /><category android:name="android.intent.category.LAUNCHER" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>
【Android智能硬件开发】【004】通过PackageInstaller静默安装apk相关推荐
- Android智能硬件开发心得总结(二)
Android智能硬件开发心得总结(一) 6.关于屏幕显示 每次一个新项目的开发,我所做的第一件事就是确定所选定显示屏的型号规格,然后将规格书发给主板供应商让其先调屏参. 调屏参是很可能会出现无法点亮 ...
- 【Android智能硬件开发】【001】APK自启动
前言 智能硬件不同于普通安卓手机,由于部署在工地现场,大多不会有专人维护 所以必须具备开机自启动.远程自动升级.自动重启.状态自动上报等功能 这篇博客,我们首先解决最简单的,开机自启动问题 注册权限 ...
- 【Android智能硬件开发】【011】安卓串口转USB
情景 一般硬件设备提供的内置串口数量是有限的,当串口不够用时,就需要通过USB来外接这些设备 CH341是一种芯片,它可以将以串口方式进行通信的设备,转接到USB口上进行通信 使用该方案,需要购买对应 ...
- Android 系统(252)---Android:BLE智能硬件开发详解
Android:BLE智能硬件开发详解 目录 前言 BLE是个什么鬼 BLE中的角色分工 主要的关键词和概念 GATT(Generic Attribute Profile ) Characteris ...
- Android 智能硬件的理解(2018.5.25)
1.智能硬件的理解 首先要认真的去了解目前的智能硬件行业,并且对将来智能硬件的发展有个深刻的认知.可以通过专业的招聘网站上的行业公司和招聘职业等方法了解企业.产品,和对你所做的硬件信息有大概的了解,不 ...
- 高通Android智能平台开发总结
高通Android智能平台开发总结 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境. 7 1.2 搭建高通平台环境开发环境. 7 1.2.1 高通android智能平台概 ...
- 软硬整合技术、智能硬件开发与顶层设计应用_课程
来自台湾的高焕堂老师,和来自美国硅谷的柯博文老师,共同指导... 课程名称:软硬整合技术.智能硬件开发与顶层设计应用 指导老师:高焕堂.柯博文 课程说明: 在智能&大数据时代,系统开发不仅仅攸 ...
- 这是智能硬件开发门槛被降得最低的一次
这是智能硬件开发门槛被降得最低的一次--如果"智键"."米键"和"快按钮"算智能硬件的话.这三个与耳机接头外形相似的"按钮&quo ...
- HarmonyOS硬件创新合作伙伴,【HarmonyOS】HarmonyOS智能硬件开发学习指南 - HDC2020
2020年9月10日,华为HarmonyOS 2.0版本正式官宣!这一次,借助 HarmonyOS 全场景分布式系统和设备生态,将定义全新的硬件.交互和服务体验,打开焕然一新的全场景世界,不愧是Har ...
- iOS蓝牙原生封装,助力智能硬件开发
代码地址如下: http://www.demodashi.com/demo/12010.html 人工智能自1956年提出以来,一直默默无闻,近年来人工智能的发展得到重视逐渐发展起步,智能硬件.智能手 ...
最新文章
- 易创课堂深圳干货,趁热下载
- Java常用的八种排序算法与代码实现
- js设置了location.href不跳转问题
- 张一鸣:优秀年轻人的五个特点
- 在js中实现邮箱格式的验证
- Maven的基础概念
- 天不知道地知道你不知道我知道谜底_冷门还免费!宝鸡这几个小众红叶观赏地,资深老司机都不一定知道...
- MySQL基础 - 注意事项
- sasmgr get_info -D /dev/sasd1 -q raid 查看RX6600 硬件 raid 信息
- 腾讯与老干妈达成和解;传苹果将停掉 MacBook Air 产品线;VS Code 1.47 发布| 极客头条...
- 50欧姆线设计 高频pcb_高频电路布线的应对方法有哪些?
- Java零基础系列001——第一个程序
- 【车间调度】基于matlab多层编码遗传算法求解车间调度问题【含Matlab源码 035期】
- 央视频卫视app直播收看教程(2021)
- pt和px有什么区别?pt和px如何转换?
- pytroch的安装及使用
- xss.haozi.me靶场详解
- 身份证读卡器 护照阅读器,如何能做到读取多证件呢?
- Robust Object Tracking via Sparsity-based Collaborative Model
- 山东科技大计算机与软件工程,山东科技大学(专业学位)软件工程考研难吗
热门文章
- Java随机生成中文姓名工具
- linux卸载bzip2,bzip2命令_Linux bzip2命令:压缩和解压文件(.bz2文件)
- Origin绘制图表所需要的步骤
- 波形垫片弹性系数计算_波形弹簧的特点介绍
- 记录一下,关于Instagram
- 基于SRP创建自定义渲染管线
- 计算机毕业设计Java多媒体网络教学(源码+系统+mysql数据库+lW文档)
- MATLAB小波图像融合处理
- esxi7.0虚拟机安装群辉DS3615-6.2.2版本
- VMware如何彻底卸载干净