2012-05-07 13 views
13

Desidero disinstallare la mia applicazione al clic del pulsante. Per questo sto usando il seguente codice.Elimina la mia applicazione a livello di codice (Android)

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

mi dà risultato, ma voglio cancellare direttamente senza click sul tasto "Ok" della finestra di dialogo con il messaggio "Questa applicazione verrà disinstallata".

Voglio solo disinstallare l'applicazione direttamente.

+2

È necessario disporre dell'autorizzazione root per farlo. – xDragonZ

+2

Questo tipo di cose è riservato per le applicazioni di sistema per buoni motivi, quindi sei bloccato con il rooting del tuo dispositivo. – Jens

+1

Penso che dovresti fare un passo indietro e pensare al perché vorresti farlo comunque. Perché dovresti sostituire il metodo standard per la rimozione di un'applicazione? – kcoppock

risposta

11

La disinstallazione senza conferma dell'utente non è consentita per applicazioni di terze parti.

Come xDragonZ fa notare, un processo di root può farlo in modo grossolano rimuovendo letteralmente la directory e lasciando che il gestore di pacchetti gestisca la perdita, ma non è una soluzione ampiamente distribuibile, poiché AFAIK nessun dispositivo viene fornito con tale capacità per app per eseguire il proprio processo di root helper - si tratta di una modifica post-vendita rischiosa.

0

Sì, è possibile disinstallare un pacchetto in Android. Inoltre puoi anche saltare chiedendo all'utente di premere il pulsante OK sulla schermata di disinstallazione. Puoi farlo utilizzando il servizio di accessibilità in 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 

    } 
} 
Problemi correlati