如何在没有用户干预的情况下卸载自己的Android应用程序?

4
我所知道的卸载应用程序的唯一方法是通过发送意图(如此处所述),但这会打开一个活动以供用户确认卸载。
我知道,除非您拥有DELETE_PACKAGES权限(这意味着您是OEM),否则没有其他方法可以卸载其他应用程序而无需用户干预。
但是,有没有一种方法可以卸载我的应用程序而无需用户干预?
2个回答

5
PackageManager 中有一个名为 deletePackage 的隐藏函数(可以通过反射调用)。但它需要 android.permission.DELETE_PACKAGES 权限。无论你是应用程序的所有者还是其他用户,你都必须被授予该权限。而这个权限不会被授予第三方应用程序。
所以,基本上,即使是你自己的应用程序,也不能卸载它。这其实很有道理,因为用户应该掌控诸如安装和卸载应用程序等关键事件。想象一下,如果用户刚从市场中安装了应用程序,但找不到它(或类似情况),那么他或她肯定会感到沮丧。
你应该只是禁用应用程序的功能,并显示适当的消息。这将更加友好。

0

如果您的应用程序配置为设备所有者,则可以静默安装和卸载应用程序。

设备所有者从Android 5.0开始引入。 静默安装功能从6.0版本开始添加。

来自Android源码:

if ((mPm.checkUidPermission(android.Manifest.permission.INSTALL_PACKAGES, installerUid)
        == PackageManager.PERMISSION_GRANTED)
        || (installerUid == Process.ROOT_UID)
        || mIsInstallerDeviceOwner) {
    mPermissionsAccepted = true;
} else {
    mPermissionsAccepted = false;
}

这个特权是赋予已经获取了 root 权限的用户、系统应用和设备所有者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接