前言:开发手机应用转到 TV 应用小半年了,最头疼的就是焦点问题。今天不说焦点,来看看应用商店的安装 / 卸载功能。


项目是中途接手的,安装方法一直使用的是 packageManager.installPackage(Uri var1, PackageInstallObserver var2, int var3, String var4) 这个 API,实现静默安装的功能。直到系统升级为 Android P,安装方法报错:

java.lang.NoClassDefFoundError: Failed resolution of: Landroid/content/pm/IPackageInstallObserver$Stub;

经查看 API 最新文档,查阅到注解“deprecated replaced by {@link PackageInstaller}”,需要改用 PackageInstaller 类来实现安装/卸载功能,Android API 21 添加了这个类。

具体实现:

注:因为应用商店做的是 系统应用,不需要在格外的去获取系统权限,若不是系统级应用,需要先获取对应安装/卸载权限再进行操作。

  1. 安装
/*** @param filepathApk 文件路径*/
private void installPackage(String filepathApk) {try {PackageInstaller pi = mContext.getPackageManager().getPackageInstaller();//给定模式,创建新的参数,创建新安装会话,返回唯一 Idint sessionId= pi.createSession(new PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL));//打开现有会话,主动执行工作PackageInstaller.Session session = pi.openSession(sessionId);long sizeBytes = 0;final File file = new File(filepathApk);if (file.isFile()) {sizeBytes = file.length();}InputStream in = null;OutputStream out = null;in = new FileInputStream(filepathApk);//打开一个流,将一个APK文件写入会话//指定有效长度系统将预先分配底层磁盘空间以优化磁盘上的放置out = session.openWrite("app_store_session", 0, sizeBytes);int total = 0;byte[] buffer = new byte[65536];int len;while ((len= in.read(buffer)) != -1) {total += len;out.write(buffer, 0, len);}//根据需要调用,用来确保字节已保留到磁盘session.fsync(out);in.close();out.close();MyLogger.Log().v("InstallApkViaPackageInstaller - Success: streamed apk " + total + " bytes");PendingIntent broadCastTest = PendingIntent.getBroadcast(mContext,sessionId,new Intent(ACTION_INSTALL_COMPLETE),PendingIntent.FLAG_UPDATE_CURRENT);//提交之前必须关闭所有流session.commit(broadCastTest.getIntentSender());session.close();} catch (Exception ex) {ex.printStackTrace();}
}

ACTION_INSTALL_COMPLETE 是自己声明的变量。

  1. 卸载
/*** @param packageName 应用包名*/
private void uninstallPackage(String packageName) {Intent intent = new Intent(mContext, mContext.getClass());PendingIntent sender = PendingIntent.getActivity(mContext, 0, intent, 0);PackageInstaller mPackageInstaller = mContext.getPackageManager().getPackageInstaller();mPackageInstaller.uninstall(packageName, sender.getIntentSender());
}

了解此类相关点击 PackageInstaller
业务实现介绍至此,若有问题,欢迎交流。

PackageInstaller 类安装/卸载应用相关推荐

  1. 手机管理应用研究【2】—— 安装卸载篇

    欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa 说明 Android通过PackageManagerService(后面简称Pms)进行包管理,其主要功能包括:用户I ...

  2. C++程序安装卸载WDM驱动

    编译环境:VS2012 + WIN8 64 测试环境:VM WIN7 测试对象:WDM驱动 (sys文件 和 inf文件) 项目类型:Win32 Console Application 其它说明:代码 ...

  3. linux软件安装卸载命令行

    国内较快开源软件镜象站点,包括Debian.Ubuntu.Fedora.Gentoo.Centos.FreeBSD.Eclipse等开源软件的镜象 http://mirrors.163.com,htt ...

  4. SQL相关概念与MYSQL下载安装卸载

    SQL相关概念与MYSQL下载安装卸载 为什么学习数据库 数据库的相关概念 MySQL 什么是MYSQL DBMS的分类 MYSQL版本 MYSQL下载 MYSQL安装 MYSQL安装过程中出现的问题 ...

  5. php实现addon安装卸载,插件Addon文件

    ## 插件Addon文件 生成目录结构文件后,会看到演示插件根目录下以标识命名的插件文件.[DemoaddonAddon.php]其中Demoaddon是在创建插件时填写的标识名称. ## 插件信息 ...

  6. win10安装Mysql8的两种方式(安装/卸载-图文教程)

    前言 命令行窗口打开的方式(任选一种): WIN+R输入cmd (打开普通的窗口) WIN+X 选择Windows PowerShell或者Windows PowerShell(管理员) 系统服务列表 ...

  7. Android 9 P静默安装/卸载App适配终极指南

          Android 9 (P)静默安装/卸载App适配终极指南 Android 9 (P)开发适配指南系列博客目录: Adnroid 9 (P) recovery升级Map of '@/cac ...

  8. linux安装卸载软件

    一 .首先要清楚几个概念 (一)归档: 归档是把多个文件合并成一个文件的过程.生成的文件称为归档包. 归档包带后缀名.不同的归档程序,生成的归档包的后缀名不同. (二)压缩: 压缩是把一个大文件变成一 ...

  9. Ubuntu Linux 软件寻找/安装/卸载 图文详解教程

    作为一个桌面操作系统,Ubuntu(以后我简称为UB)自然也和Windows一样,拥有众多的实用软件,让我们平常来使用.很多新手,在安装了Ubuntu系统后,面对着与众不同的桌面,不知道该如何安装软件 ...

  10. python3.6.6卸载_Python3.6安装卸载、执行命令、执行py文件的方法详解

    Python3.6安装卸载.执行命令.执行py文件的方法详解 开发一个功能,C/C++可能要500行代码,Java可能需要200行代码,然而Python可能需要50行代码,虽然代码少,可能开发的飞起, ...

最新文章

  1. PHP面试MySQL数据库的索引
  2. mysql 主从配置(master slave)
  3. mysql 服务器性能,mysql服务器性能配置
  4. Flume-NG源码阅读之AvroSink
  5. 在toad新增oracle用户,利用toad发现oracle自动为你干了什么(表空间建立和用户建立)...
  6. 一次Java解析数独的经历,java面试题,java高级笔试题
  7. 数据可视化图表有哪些类型
  8. Spring Boot 系列(七)Swagger2-生成RESTful接口文档
  9. 一个简单小说阅读网页html,简单版小说搜索阅读(64位程序)
  10. L298Nnbsp;驱动模块的应用
  11. 人脸检测实战终极:使用 OpenCV 和 Python 进行人脸对齐
  12. django的ORM常用字段和参数
  13. Java Web调用Matlab实现在线绘图
  14. Silverlight实用窍门系列:1.Silverlight读取外部XML加载配置---(使用WebClient读取XAP包同目录下的XML文件))【附带实例源码】...
  15. VB.NET学习笔记:使用Random类生成随机数(不重复、数字、字母)
  16. k8s(六):配置管理与集群安全机制
  17. android 连接蓝牙电子秤_Android实现蓝牙电子秤连接
  18. Scapy3.0 Documentation ( Usage )
  19. 如何通过二维码下载安卓软件(.APK文件)
  20. 计算机ppt的,介绍计算机PPT.ppt

热门文章

  1. Origin学习中文论坛及自带的learning center
  2. 信创操作系统--统信UOS桌面版(多媒体软件:图像查看、处理,音频播放、录音机)
  3. python 制作标签云
  4. WPS表格 JSA 学习笔记
  5. matlab心电信号特征提取
  6. Cortex-M3 (NXP LPC1788)之EEPROM存储器
  7. Axure RP 8.0 软件安装教程
  8. IDEA的Mybatis插件
  9. CADD课程学习(2)-- 靶点晶体结构信息
  10. SEO黑帽寄生虫快排的生成原理及做法[详解]