【发布时间】:2019-09-09 10:47:11
【问题描述】:
我遇到了一个关于如何获取设备卸载对话框侦听器的问题,如下所示, “您要卸载此应用程序吗?” 为此,我尝试使用设备管理员管理器,但没有得到所需的解决方案。如果您有任何帮助,我们将不胜感激。
【问题讨论】:
标签: android kotlin system uninstallation
我遇到了一个关于如何获取设备卸载对话框侦听器的问题,如下所示, “您要卸载此应用程序吗?” 为此,我尝试使用设备管理员管理器,但没有得到所需的解决方案。如果您有任何帮助,我们将不胜感激。
【问题讨论】:
标签: android kotlin system uninstallation
如果您想阻止用户卸载您的应用,您可以注册为Device Admin 以防止卸载(用户必须取消注册才能卸载您的应用),here 的示例说明如何操作那,从那里我想你可以限制Android设置应用程序的打开(用户必须打开才能将你的应用程序取消注册为设备管理员),here的如何做到这一点,设置应用程序包名称是com.android.settings .
关于如何检测应用卸载的第二个答案:
恐怕没有官方的方法可以检测到卸载弹出窗口,即使你有设备管理员权限,但是有一种 hacky 方法可以做到这一点,检查一下here,它并不完美并且有它的限制,但总比没有好。
如何提示卸载应用的原答案:
您不需要设备管理员管理器来提示卸载您的应用程序,您可以简单地使用意图来启动您要求的卸载提示,如下所示:
Uri packageUri = Uri.parse("package:APP_PACKAGE_NAME");
Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageUri);
startActivity(uninstallIntent);
注意:以上intent ACTION_UNINSTALL_PACKAGE仅在API 14(Android 4.0)之后可用,如果您的应用针对Android P及以上,您必须将权限REQUEST_DELETE_PACKAGE添加到您的@ 987654335@。此外,自 Android Q 以来,此 Intent 已被弃用,在这种情况下,您应该使用 PackageInstaller.uninstall(),如下所示:
String packageName = "com.your.app.package";
Intent intent = new Intent(getActivity(), getActivity().getClass());
PendingIntent sender = PendingIntent.getActivity(getActivity(), 0, intent, 0);
PackageInstaller packageInstaller = getActivity().getPackageManager().getPackageInstaller();
packageInstaller.uninstall(packageName, sender.getIntentSender());
不过有一大堆限制,详情请参阅documentation。
【讨论】:
com.android.settings。