Подтвердить что ты не робот

Удалите мое приложение программно (Android)

Я хочу удалить приложение при нажатии кнопки. Для этого я использую следующий код.

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

Это дает мне результат, но я хочу удалить его напрямую, не нажимая кнопку "ОК" диалога с сообщением "Это приложение будет удалено".

Мне просто нужно удалить приложение напрямую.

4b9b3361

Ответ 1

Деинсталляция без подтверждения пользователя не разрешена сторонним приложениям.

Как указывает xDragonZ, корневой процесс может грубо сделать это, буквально удалив каталог и оставив диспетчер пакетов справиться с потерей, но это не очень широко развертываемое решение, поскольку AFAIK никакими устройствами не поставляется с этой возможностью для приложений для запуска собственного корневого вспомогательного процесса - это рискованная модификация послепродажного обслуживания.

Ответ 2

Да, можно удалить пакет на 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

    }
}