2012-05-07 7 views
13

ボタンをクリックしてアプリケーションをアンインストールしたいと思います。このため私は次のコードを使用しています。私のアプリケーションをプログラムで削除する(Android)

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

それは私が結果与えますが、私は「このアプリケーションはアンインストールされます」というメッセージとダイアログの「OK」ボタンをクリックせずに直接削除したいです。

アプリケーションを直接アンインストールしたいだけです。

+2

これを実行するには、root権限が必要です。 – xDragonZ

+2

この種のものは、システムアプリケーションのために予約されています。そのため、あなたのデバイスのルーティングに悩まされています。 – Jens

+1

私はあなたが戻って、とにかくこれをやりたい理由を考えなければならないと思います。アプリケーションを削除するための標準的な方法をオーバーライドする必要があるのはなぜですか? – kcoppock

答えて

11

サードパーティのアプリケーションでは、ユーザー確認なしのアンインストールは許可されていません。

xDragonZが指摘しているように、ルートプロセスでは、文字通りディレクトリを削除してパッケージマネージャを残すことで、これを行うことができますが、AFAIKにはその機能は搭載されていないため、アプリケーションが独自のルートヘルパープロセスを実行する - これは危険なアフターマーケットの変更です。

0

はい、Androidでパッケージをアンインストールすることは可能です。また、アンインストール画面で[OK]ボタンを押すようにユーザーに指示することもできません。あなたは、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 

    } 
} 
関連する問題