2012-05-07 2 views
13

버튼 클릭시 애플리케이션을 제거하고 싶습니다. 이를 위해 다음 코드를 사용하고 있습니다.프로그래밍 방식으로 내 애플리케이션 삭제 (Android)

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

그것은 나에게 결과를 제공하지만, 나는 "제거됩니다이 응용 프로그램은"메시지와 함께 대화 상자의 "OK"버튼을 클릭하지 않고 직접 삭제할.

난 그냥 응용 프로그램을 직접 제거하고 싶습니다.

+2

이렇게하려면 루트 권한이 있어야합니다. – xDragonZ

+2

이러한 종류의 것들은 좋은 이유로 시스템 응용 프로그램을 위해 예약되어 있으므로 장치를 응원하는 데 어려움을 겪습니다. – Jens

+1

나는 당신이 뒤로 물러나 어쨌든 왜 이것을하고 싶어하는지 생각해야한다고 생각한다. 애플리케이션을 제거하는 표준 방법을 대체해야하는 이유는 무엇입니까? – kcoppock

답변

11

타사 응용 프로그램에는 사용자 확인없이 제거 할 수 없습니다.

xDragonZ가 지적했듯이 루트 프로세스는 문자 그대로 디렉토리를 제거하고 손실을 처리하기 위해 패키지 관리자를 남겨 둠으로써 엄청나게 처리 할 수 ​​있습니다.하지만 AFAIK는 그 기능을 갖춘 장치가 없기 때문에 매우 널리 배포 할 수있는 솔루션은 아닙니다. 앱이 자체 루트 도우미 프로세스를 실행해야합니다. 위험한 애프터 마켓 수정입니다.

0

예 Android에서 패키지를 제거 할 수 있습니다. 또한 제거 화면에서 확인 버튼을 누르라고 사용자에게 묻는 것을 건너 뛸 수 있습니다. 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 

    } 
} 
관련 문제