前言:开发手机应用转到 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 添加了这个类。
具体实现:
注:因为应用商店做的是 系统应用,不需要在格外的去获取系统权限,若不是系统级应用,需要先获取对应安装/卸载权限再进行操作。
- 安装
/**
* @param filepathApk 文件路径
*/
private void installPackage(String filepathApk) {
try {
PackageInstaller pi = mContext.getPackageManager().getPackageInstaller();
//给定模式,创建新的参数,创建新安装会话,返回唯一 Id
int sessionId= pi.createSession(new PackageInstaller.SessionParams(Pa