PackageInstaller 只是提供了一个用户界面给用户来管理应用的安装。PackageInstaller 会调用一个叫 InstallAppProgress 的 Activity 来获得请求。 接下来,InstallAppProgress会与PackageManager服务进行交互,并通过 intalld 来安装文件。
installd是一个系统守护程序,使用管理员权限进行操作。通过Linux套接字 /dev/socket/installd 来获取来自 PackageManager 的请求。
安装完成后 PackageManager 会向系统广播事件 Intent.ACTION_PACKAGE_ADDED 或者 Intent.ACTION_PACKAGE_REPLACED
//Android代码如何监控apk安装_卸载_替换
public class GetBroadcast extends BroadcastReceiver {
private static GetBroadcast mReceiver = new GetBroadcast();
private static IntentFilter mIntentFilter;
public static void registerReceiver(Context context) {
mIntentFilter = new IntentFilter();
mIntentFilter.addDataScheme("package");
mIntentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
mIntentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
mIntentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
context.registerReceiver(mReceiver, mIntentFilter);
}
public static void unregisterReceiver(Context context) {
context.unregisterReceiver(mReceiver);
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
Toast.makeText(context, "有应用被添加", Toast.LENGTH_LONG).show();
} else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
Toast.makeText(context, "有应用被删除", Toast.LENGTH_LONG).show();
}else if (Intent.ACTION_PACKAGE_REPLACED.equals(action)) {
Toast.makeText(context, "有应用被替换", Toast.LENGTH_LONG).show();
}
}
}
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />