6

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

我做了什么:

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

我不能(几乎放弃):

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

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

论坛上几乎没有关于这个主题的文档和帖子,我有点困惑,为什么不能直接实施这样一个与 Android 安全策略不冲突的简单操作。

有没有办法让操作系统在应用程序卸载时删除相应的快捷方式?我可以捕捉到应用程序在被删除之前被卸载的事件吗?

4

3 回答 3

2

似乎您没有以正确的方式使用 install_shortcut 意图。可能您创建了一个没有任何参数的意图。您应该使用操作Intent.ACTION_MAIN参数创建意图。

Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
shortcutIntent.setClassName(this, this.getClass().getName());

Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
Parcelable iconResource = Intent.ShortcutIconResource.fromContext(
            this,  R.drawable.launcher_icon);
intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
sendBroadcast(intent);
于 2012-11-06T10:34:35.317 回答
2

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

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

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

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


编辑:
如果您要预安装应用程序(但不是 commonsware.com 注释的固件),您可以预安装两个APK。其中一个没有启动器,仅由处理ACTION_PACKAGE_REMOVED事件和调用的广播接收器组成UNINSTALL_SHORTCUT

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

于 2010-01-25T11:54:19.687 回答
1

您所描述的是主屏幕的限制。Launcher2 的下一个版本解决了这个问题,并自动删除与应用程序关联的小部件和快捷方式。如果找不到关联,可能会留下一些快捷方式(例如,如果您的应用程序创建了音乐播放器的快捷方式。)

于 2010-01-25T17:09:54.043 回答