2012-05-07 36 views
13

Tôi muốn gỡ cài đặt ứng dụng của mình khi nhấp vào nút. Đối với điều này tôi đang sử dụng mã sau đây.Xóa ứng dụng của tôi theo lập trình (Android)

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

Nó cho tôi kết quả, nhưng tôi muốn xóa trực tiếp mà không cần nhấp vào nút "Ok" của hộp thoại có thông báo "Ứng dụng này sẽ bị Gỡ cài đặt".

Tôi chỉ muốn gỡ cài đặt ứng dụng trực tiếp.

+2

Bạn cần có quyền root để thực hiện điều đó. – xDragonZ

+2

Loại công cụ này được dành riêng cho các ứng dụng hệ thống vì lý do chính đáng - vì vậy bạn bị kẹt với việc root thiết bị của mình. – Jens

+1

Tôi nghĩ bạn nên lùi lại và nghĩ về lý do tại sao bạn vẫn muốn làm điều này. Tại sao bạn cần ghi đè phương pháp chuẩn để xóa ứng dụng? – kcoppock

Trả lời

11

Gỡ cài đặt mà không có xác nhận người dùng không được phép cho các ứng dụng của bên thứ ba. Như xDragonZ chỉ ra, một quá trình gốc có thể làm điều này bằng cách loại bỏ thư mục và rời khỏi trình quản lý gói để xử lý sự mất mát, nhưng đó không phải là giải pháp có thể triển khai rộng rãi, vì AFAIK không có thiết bị nào có khả năng ứng dụng để chạy quy trình trợ giúp gốc của chính họ - đó là một sửa đổi hậu mãi rủi ro.

0

Có thể gỡ cài đặt gói trong Android. Hơn nữa, bạn cũng có thể bỏ qua yêu cầu người dùng nhấn nút OK trên màn hình gỡ cài đặt. Bạn có thể làm điều đó bằng cách sử dụng dịch vụ trợ năng trong 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 

    } 
} 
Các vấn đề liên quan