Мое приложение имеет системные привилегии. Он будет внутри прошивки, теперь он находится в /system/app
Мне удалось установить приложения молча с этим сообщением
программно установить/удалить APK (PackageManager vs 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. Но я не знаю, как это сделать (у меня нет такого класса).
Спасибо