如何在卸载时自动从主屏幕删除应用程序快捷方式?

Vla*_*Dmi 6 android homescreen android-launcher

我正在开发一个应用程序,它应该在安装后将其快捷方式添加到主屏幕,并在卸载应用程序后将其删除.应用程序将预先安装在最终用户设备上,但仍应具有卸载选项.任务看起来很简单,但我遇到了很多麻烦.

我做了什么:

  • 在app首次启动时或在newt设备重启时使用com.android.launcher.action.INSTALL_SHORTCUT在主屏幕上添加快捷方式.
  • 使用com.android.launcher.action.UNINSTALL_SHORTCUT手动删除快捷方式.

我不能(并且几乎放弃):

  • 卸载应用程序时自动删除快捷方式.

无法使用Intent.ACTION_PACKAGE_REMOVED,因为要卸载的应用程序没有收到此意图.我执行了一些测试,发现使用该应用程序删除的唯一快捷方式是从菜单"添加到主屏幕=>快捷方式=>应用程序=>应用程序活动"创建的快捷方式.在卸载应用程序后,以编程方式创建或在AndroidManifest中声明的快捷方式仍保留在主屏幕上.

论坛上几乎没有关于这个主题的文档和帖子,我有点困惑为什么这样一个与Android安全策略不矛盾的简单操作无法直接实现.

有没有办法要求OS删除应用程序卸载时的相应快捷方式?我可以在删除应用程序之前捕获应用程序正在卸载的事件吗?

Chr*_*Orr 2

我不相信你能做到这一点。

首先,因为您无法卸载设备固件上预安装的应用程序 - 它们存在于/system只读文件系统的分区上。

其次,正如您所注意到的,您的应用程序不会收到正在卸载的通知

如果用户可能不想使用您的应用程序,他们是否会忽略应用程序图标,就像我对手机上预装的几个应用程序所做的那样?


编辑:
如果您要预安装应用程序(但不是按照 commonsware.com 的说明在固件上安装),则可以预安装两个APK。其中之一没有启动器,仅包含处理ACTION_PACKAGE_REMOVED事件和调用的广播接收器UNINSTALL_SHORTCUT

我不认为有任何明确的权限检查需要通过添加它的同一应用程序删除快捷方式,但无论如何您都可以通过sharedUserId对两个 APK 使用 a 来解决这个问题。