2012-05-07 15 views
13

Quiero desinstalar mi aplicación al hacer clic en el botón. Para esto estoy usando el siguiente código.Eliminar mi aplicación mediante programación (Android)

Uri packageURI = Uri.parse("package:"+packageName); 
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI); 
startActivity(uninstallIntent); 

Me da resultado, pero quiero borrar directamente sin clic en el botón "OK" de diálogo con el mensaje "Esta aplicación se desinstalará".

Solo quiero desinstalar la aplicación directamente.

+2

Necesita tener permiso de root para hacerlo. – xDragonZ

+2

Este tipo de cosas están reservadas para las aplicaciones del sistema por buenas razones, por lo que está obligado a rootear su dispositivo. – Jens

+1

Creo que debería dar un paso atrás y pensar por qué querría hacer esto de todos modos. ¿Por qué necesitaría anular el método estándar para eliminar una aplicación? – kcoppock

Respuesta

11

La desinstalación sin la confirmación del usuario no está permitida para aplicaciones de terceros.

Como señala xDragonZ, un proceso de root puede hacer esto literalmente eliminando el directorio y dejando que el administrador de paquetes se encargue de la pérdida, pero esa no es una solución muy implementable, ya que AFAIK no incluye esta capacidad. aplicaciones para ejecutar su propio proceso de ayuda raíz - esa es una modificación arriesgada del mercado de accesorios.

0

Sí, es posible desinstalar un paquete en Android. Además, también puede omitir que el usuario solicite presionar el botón OK en la pantalla de desinstalación. Puedes hacerlo usando el servicio de Accesibilidad en Android.

public class MyAccessibilityService extends AccessibilityService { 
    private static final String TAG = MyAccessibilityService.class 
      .getSimpleName(); 

    @Override 
    public void onAccessibilityEvent(AccessibilityEvent event) { 
     Log.i(TAG, "ACC::onAccessibilityEvent: " + event.getEventType()); 

     //TYPE_WINDOW_STATE_CHANGED == 32 
     if (AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED == event 
       .getEventType()) { 
      AccessibilityNodeInfo nodeInfo = event.getSource(); 
      Log.i(TAG, "ACC::onAccessibilityEvent: nodeInfo=" + nodeInfo); 
      if (nodeInfo == null) { 
       return; 
      } 

      List<AccessibilityNodeInfo> list = nodeInfo 
        .findAccessibilityNodeInfosByViewId("com.android.settings:id/left_button"); 
      for (AccessibilityNodeInfo node : list) { 
       Log.i(TAG, "ACC::onAccessibilityEvent: left_button " + node); 
       node.performAction(AccessibilityNodeInfo.ACTION_CLICK); 
      } 

      list = nodeInfo 
        .findAccessibilityNodeInfosByViewId("android:id/button1"); 
      for (AccessibilityNodeInfo node : list) { 
       Log.i(TAG, "ACC::onAccessibilityEvent: button1 " + node); 
       node.performAction(AccessibilityNodeInfo.ACTION_CLICK); 
      } 
     } 

    } 

    @Override 
    public void onServiceConnected() { 
     Log.i(TAG, "ACC::onServiceConnected: "); 
    } 

    @Override 
    public void onInterrupt() { 
     // TODO Auto-generated method stub 

    } 
} 
Cuestiones relacionadas