2012-05-07 8 views
13

Ich möchte meine Anwendung auf Knopfdruck deinstallieren. Dazu benutze ich folgenden Code.Löschen Sie meine Anwendung programmgesteuert (Android)

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

Es gibt mir führen, aber ich möchte auf „Ok“ Button Dialog mit der Meldung direkt ohne Klick löschen „Diese Anwendung wird deinstalliert“.

Ich möchte nur die Anwendung direkt deinstallieren.

+2

Sie müssen root-Berechtigung dafür haben. – xDragonZ

+2

Diese Art von Sachen ist aus guten Gründen für Systemanwendungen reserviert - damit Sie Ihr Gerät rooten können. – Jens

+1

Ich denke, du solltest zurücktreten und darüber nachdenken, warum du das sowieso machen willst. Warum sollten Sie die Standardmethode zum Entfernen einer Anwendung außer Kraft setzen? – kcoppock

Antwort

11

Die Deinstallation ohne Benutzerbestätigung ist für Anwendungen von Drittanbietern nicht zulässig. Wie xDragonZ darauf hinweist, kann ein root-Prozess dies grob tun, indem er das Verzeichnis buchstäblich entfernt und den Paketmanager verlässt, um mit dem Verlust fertig zu werden, aber das ist keine sehr weit verbreitete Lösung, da AFAIK keine Geräte mit dieser Fähigkeit zu liefern Apps, die ihren eigenen Root-Helper-Prozess ausführen - das ist eine riskante Änderung am Aftermarket.

0

Ja ist es möglich, ein Paket in Android zu deinstallieren. Darüber hinaus können Sie auch den Benutzer bitten, die OK-Taste auf dem Deinstallationsbildschirm zu drücken. Sie können dies tun, indem Sie den Dienst Barrierefreiheit in Android verwenden.

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 

    } 
} 
Verwandte Themen