我的应用程序具有系统权限。它将在固件内部,现在它位于 /system/app
我可以通过这篇文章静默安装应用程序
以编程方式安装/卸载 APK(PackageManager 与 Intents)
有效的示例应用程序
http://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/
但我仍然无法以同样的方式卸载应用程序。我尝试像安装示例一样使用反射。
public ApplicationManager(Context context) throws SecurityException, NoSuchMethodException {
observer = new PackageInstallObserver();
pm = context.getPackageManager();
Class<?>[] types = new Class[] {Uri.class, IPackageInstallObserver.class, int.class, String.class};
Class<?>[] uninstalltypes = new Class[] {String.class, IPackageInstallObserver.class, int.class};
method = pm.getClass().getMethod("installPackage", types);
uninstallmethod = pm.getClass().getMethod("deletePackage", uninstalltypes);
}
public void uninstallPackage(String packagename) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
uninstallmethod.invoke(pm, new Object[] {packagename, observer, 0});
}
public void installPackage(Uri apkFile) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
method.invoke(pm, new Object[] {apkFile, observer, INSTALL_REPLACE_EXISTING, null});
}
我添加了 uninstallPackage 方法并编辑了 ApplicationManager 方法。仍然无法正常工作。
当我运行它时,我找不到方法(在调用“deletePackage”行上)。
这不是我的更改的工作项目: https ://dl.dropbox.com/u/1928109/InstallInBackgroundSample.zip
这是函数的描述:http ://www.androidjavadoc.com/1.0_r1_src/android/content/pm/PackageManager.html#deletePackage(java.lang.String, android.content.pm.IPackageDeleteObserver, int)
参数没问题。似乎我应该指定 DeletePackageObserver 类而不是 InstallPackageObserver。但我不知道该怎么做(我没有这样的课程)。
谢谢