前言

智能硬件不同于普通手机,大多是无人值守的,所以升级时只能采用静默升级,即后台自动升级的方式

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相关推荐

  1. Android智能硬件开发心得总结(二)

    Android智能硬件开发心得总结(一) 6.关于屏幕显示 每次一个新项目的开发,我所做的第一件事就是确定所选定显示屏的型号规格,然后将规格书发给主板供应商让其先调屏参. 调屏参是很可能会出现无法点亮 ...

  2. 【Android智能硬件开发】【001】APK自启动

    前言 智能硬件不同于普通安卓手机,由于部署在工地现场,大多不会有专人维护 所以必须具备开机自启动.远程自动升级.自动重启.状态自动上报等功能 这篇博客,我们首先解决最简单的,开机自启动问题 注册权限 ...

  3. 【Android智能硬件开发】【011】安卓串口转USB

    情景 一般硬件设备提供的内置串口数量是有限的,当串口不够用时,就需要通过USB来外接这些设备 CH341是一种芯片,它可以将以串口方式进行通信的设备,转接到USB口上进行通信 使用该方案,需要购买对应 ...

  4. Android 系统(252)---Android:BLE智能硬件开发详解

    Android:BLE智能硬件开发详解 目录 前言 BLE是个什么鬼 BLE中的角色分工 主要的关键词和概念  GATT(Generic Attribute Profile ) Characteris ...

  5. Android 智能硬件的理解(2018.5.25)

    1.智能硬件的理解 首先要认真的去了解目前的智能硬件行业,并且对将来智能硬件的发展有个深刻的认知.可以通过专业的招聘网站上的行业公司和招聘职业等方法了解企业.产品,和对你所做的硬件信息有大概的了解,不 ...

  6. 高通Android智能平台开发总结

    高通Android智能平台开发总结 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境. 7 1.2 搭建高通平台环境开发环境. 7 1.2.1 高通android智能平台概 ...

  7. 软硬整合技术、智能硬件开发与顶层设计应用_课程

    来自台湾的高焕堂老师,和来自美国硅谷的柯博文老师,共同指导... 课程名称:软硬整合技术.智能硬件开发与顶层设计应用 指导老师:高焕堂.柯博文 课程说明: 在智能&大数据时代,系统开发不仅仅攸 ...

  8. 这是智能硬件开发门槛被降得最低的一次

    这是智能硬件开发门槛被降得最低的一次--如果"智键"."米键"和"快按钮"算智能硬件的话.这三个与耳机接头外形相似的"按钮&quo ...

  9. HarmonyOS硬件创新合作伙伴,【HarmonyOS】HarmonyOS智能硬件开发学习指南 - HDC2020

    2020年9月10日,华为HarmonyOS 2.0版本正式官宣!这一次,借助 HarmonyOS 全场景分布式系统和设备生态,将定义全新的硬件.交互和服务体验,打开焕然一新的全场景世界,不愧是Har ...

  10. iOS蓝牙原生封装,助力智能硬件开发

    代码地址如下: http://www.demodashi.com/demo/12010.html 人工智能自1956年提出以来,一直默默无闻,近年来人工智能的发展得到重视逐渐发展起步,智能硬件.智能手 ...

最新文章

  1. 易创课堂深圳干货,趁热下载
  2. Java常用的八种排序算法与代码实现
  3. js设置了location.href不跳转问题
  4. 张一鸣:优秀年轻人的五个特点
  5. 在js中实现邮箱格式的验证
  6. Maven的基础概念
  7. 天不知道地知道你不知道我知道谜底_冷门还免费!宝鸡这几个小众红叶观赏地,资深老司机都不一定知道...
  8. MySQL基础 - 注意事项
  9. sasmgr get_info -D /dev/sasd1 -q raid 查看RX6600 硬件 raid 信息
  10. 腾讯与老干妈达成和解;传苹果将停掉 MacBook Air 产品线;VS Code 1.47 发布| 极客头条...
  11. 50欧姆线设计 高频pcb_高频电路布线的应对方法有哪些?
  12. Java零基础系列001——第一个程序
  13. 【车间调度】基于matlab多层编码遗传算法求解车间调度问题【含Matlab源码 035期】
  14. 央视频卫视app直播收看教程(2021)
  15. pt和px有什么区别?pt和px如何转换?
  16. pytroch的安装及使用
  17. xss.haozi.me靶场详解
  18. 身份证读卡器 护照阅读器,如何能做到读取多证件呢?
  19. Robust Object Tracking via Sparsity-based Collaborative Model
  20. 山东科技大计算机与软件工程,山东科技大学(专业学位)软件工程考研难吗

热门文章

  1. Java随机生成中文姓名工具
  2. linux卸载bzip2,bzip2命令_Linux bzip2命令:压缩和解压文件(.bz2文件)
  3. Origin绘制图表所需要的步骤
  4. 波形垫片弹性系数计算_波形弹簧的特点介绍
  5. 记录一下,关于Instagram
  6. 基于SRP创建自定义渲染管线
  7. 计算机毕业设计Java多媒体网络教学(源码+系统+mysql数据库+lW文档)
  8. MATLAB小波图像融合处理
  9. esxi7.0虚拟机安装群辉DS3615-6.2.2版本
  10. VMware如何彻底卸载干净