我为特定客户开发了一个非市场应用程序,他们希望我以编程方式禁用设备的软件包安装,因为用户不应该对他们的设备做任何事情,而是使用我的应用程序。市场上有一些应用程序能够对软件包的安装进行密码保护,但我需要自己进行,因为我的应用程序需要在不提示输入密码的情况下运行更新或安装插件。我用下面的意图过滤器构建了一个接收器:
<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{
}
}
}
我怎样才能正确地做到这一点?设备没有Root,但我的应用程序的第一次安装是由我自己手动完成的,确认一些安装该功能的安全警报是没有问题的。