Mi aplicación tiene privilegios del sistema. Será dentro del firmware, ahora se encuentra en/system/appdesinstalar la aplicación de forma silenciosa con privilegios del sistema
pude instalar aplicaciones en silencio con este post
install/uninstall APKs programmatically (PackageManager vs Intents)
ejemplo aplicación que funciona
http://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/
Pero todavía no puedo desinstalar aplicaciones de la misma manera. Intenté usar la reflexión como en el ejemplo de instalación.
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});
}
He añadido el método uninstallPackage y el método editado ApplicationManager. Todavía no puedo hacer que esto funcione.
Cuando lo ejecuto obtengo el método no encontrado (en la línea invocar "deletePackage").
aquí no es proyecto de trabajar con mis cambios:https://dl.dropbox.com/u/1928109/InstallInBackgroundSample.zip
Aquí se presenta una descripción de la función: http://www.androidjavadoc.com/1.0_r1_src/android/content/pm/PackageManager.html#deletePackage(java.lang.String, android.content.pm.IPackageDeleteObserver, int)
parámetros están bien. Parece que debería especificar la clase DeletePackageObserver en lugar de InstallPackageObserver. Pero no sé cómo hacer eso (no tengo esa clase).
Gracias
Es posible que desee publicar un seguimiento de la pila y/o cualquier mensaje de error/advertencia que reciba en logcat. –
Dice que no se encontró el método deletePackage – POMATu
@POMATu es necesario tener acceso de root o teléfono rooteado para realizar una instalación o eliminación silenciosa usando el código que ha mencionado en la pregunta. – pyus13