我为特定客户开发了一个非市场应用程序,他们希望我以编程方式禁用设备的软件包安装,因为用户不会对他们的设备做任何事情,而是使用我的应用程序。 市场上有一些应用程序能够密码保护软件包的安装,但我需要自己,因为我的应用程序需要运行更新或安装插件而不提示输入密码。 我用下面的intent过滤器构建了一个接收器:
<intent-filter>
<action android:name="android.intent.action.PACKAGE_INSTALL"/>
</intent-filter>
但是这将在安装软件包之后开始,而不是之前。
我也尝试在启动程序包时接收广播,以便捕获com.android.packageinstaller
的启动,但是我没有找到一种方法来重新启动程序包,也没有能够杀死程序包,如果我的申请不是启动程序。
我试过这个:
ActivityManager servMng = (ActivityManager)context.getApplicationContext().getSystemService(context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> list =servMng.getRunningAppProcesses();
if(list != null){
for(int i=0;i<list.size();++i){
if("com.android.packageinstaller".matches(list.get(i).processName)){
int pid = android.os.Process.getUidForName("com.android.packageinstaller");
android.os.Process.killProcess(pid);
}else{
}
}
}
我怎么能正确地做到这一点? 设备未植根,但我的应用程序的第一次安装是由我自己手动完成的,确认安装该功能的安全警报是没有问题的。