以编程方式删除我的应用程序(Android)

Leo*_*Dev 14 android uninstall

我想在按钮点击时卸载我的应用程序.为此,我使用以下代码.

Uri packageURI = Uri.parse("package:"+packageName);
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
startActivity(uninstallIntent);
Run Code Online (Sandbox Code Playgroud)

它给了我结果,但我想直接删除而不点击对话框的"确定"按钮,并显示消息"此应用程序将被卸载".

我只想直接卸载应用程序.

Chr*_*ton 11

不允许用户确认卸载不允许第三方应用程序.

正如xDragonZ指出的那样,根进程可以通过逐字地删除目录并让程序包管理器处理丢失来粗略地做到这一点,但这不是一个可广泛部署的解决方案,因为AFAIK没有设备提供应用程序运行他们的能力自己的根帮助程序 - 这是一个有风险的售后修改.


小智 5

是的,可以在 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

    }
}
Run Code Online (Sandbox Code Playgroud)