Android 11 静默安装和静默卸载

本文详细介绍了如何在Android 11上实现应用的静默安装和卸载。通过`Installer.java`类实现了静默安装功能,`ActivityManagerService.java`中解决了广播发送问题,`FuncTools.java`调用了安装器接口,同时提供了`MainActivity.java`中的广播接收器来监听安装状态。
摘要由CSDN通过智能技术生成

修改记录
1.安装器

//Installer.java
package com.kte.interfacesettings.service;

import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.content.pm.IPackageInstallerCallback;
import java.io.File;
import android.os.RemoteException;
import java.io.FileInputStream;
import java.io.OutputStream;
import android.app.PendingIntent;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller.SessionInfo;
import android.content.pm.PackageParser;
import android.content.pm.IPackageInstaller;
import android.os.ServiceManager;
import com.android.internal.content.PackageHelper;
import android.os.UserHandle;
import android.app.ActivityManager;
import android.os.Binder;
import android.content.pm.IPackageManager;

public class Installer {
private static String TAG = “install”;

private Installer() {
}

public static void silentInstallApk(Context context, String apkFilePath, int userId, boolean openWhenInstalled) {
	Log.d(TAG, "[Installer] silentInstallApk...path=" + apkFilePath);
	File apkFile = new File(apkFilePath);
	IPackageManager mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package"));
	try {
		final IPackageInstaller packageInstaller = mPm.getPackageInstaller();
		packageInstaller.registerCallback(new IPackageInstallerCallback.Stub() {
			String pkgname = null;

			@Override
			public void onSessionProgressChanged(int sessionId, float progress) throws RemoteException {
				Log.d(TAG, "[Installer] silentInstallApk...onProgressChanged-> " + sessionId);
			}

			@Override
			public void onSessionFinished(int sessionId, boolean success) throws RemoteException {
				Log.d(TAG, "[Installer] silentInstallApk...Silent Install session " + sessionId + " Success=" + success + ",,pkgName=" + pkgname);
				if (success && openWhenInstalled) { 
					Intent intent = context.getPackageManager().getLaunchIntentForPackage(pkgname);
					context.startActivity(intent);
				} 
			}

			@Override
			public void onSessionCreated(int sessionId) throws RemoteException {
				SessionInfo sessionInfo = packageInstaller.getSessionInfo(sessionId);
				pkgname = sessionInfo.getAppPackageName();
				Log.d(TAG, "[Installer] silentInstallApk...Install Start sessionId-> " + sessionId + ",,pkgname=" + 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android framework

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值