【问题标题】:Add multiple launcher shortcuts to app-menu in runtime在运行时向应用菜单添加多个启动器快捷方式
【发布时间】:2014-12-08 14:18:54
【问题描述】:

我的问题不是如何在主屏幕上添加快捷方式,我 知道如何实现这一点,但我愚蠢地以编程方式添加 运行时智能手机应用菜单的启动器快捷方式。

实际上我需要在运行时将多个快捷方式添加到应用程序菜单中,这 然后都打开一个具有不同捆绑包的特定活动。 所以不是只是将启动器标志添加到清单中。

有没有人知道这是否以及如何实现,并且可以提供一些 如果没有,来源?

编辑:好吧,如果没有人知道如何做到这一点,也许有办法改变 在运行时以编程方式启动器快捷方式标签和iconImage?同样,应用程序菜单,而不是主屏幕。

edit2:我对App-Menu的理解的图片

感谢您的帮助! 干杯。

【问题讨论】:

  • 为什么需要在运行时添加多个快捷方式,而不是在清单中静态添加?您将需要多个启动器活动才能拥有多个入口点,因此需要快捷方式。
  • 因为我将/想要为用户提供添加不同启动器的功能,包括自定义名称和徽标。是的,我实际上考虑过在清单中添加各种启动器活动,并在运行时更改标签、名称和可见性。这就是我编辑我的问题的原因。能见度没问题,但我仍然无法更改名称和徽标。
  • AFAIK 你不能。您可以做的是在您的清单中放置各种活动(或活动别名)定义,这些定义可以在代码中启用/禁用。如果您想任意更改标签和图标,用户需要有一个替代启动器(或拆卸 apk 并重建它)。
  • 嗯,我也想过重建apk。实际上有一些资源(论文等)描述了这个过程。但是,不幸的是,他们都声称一旦安装就无法更改应用程序菜单中的启动器快捷方式/标签。也许可以使用自己的自定义启动器,但这会带来很多开销。我也提到了启用/禁用 - 但因为我不知道我要在安装之前启动的应用程序,所以这不是一个选项。感谢您的回答!
  • 我还在寻找答案。

标签: android shortcut


【解决方案1】:

我很确定这是不可能的。

App-menu 就是这样,一个应用程序菜单。这意味着除非您想安装不同的应用程序,否则它们不会出现在那里。 更明确地说您不能在应用菜单中显示不是应用的内容

但是,如果您确实想安装其他应用程序,则可以通过启动 Play 商店链接或已下载的 .apk 的意图来实现,如下所示:Install Application programmatically on Android。但是,如果您要尝试在本地安装软件包,请务必小心。 Facebook 很久以前就尝试过这一点,但由于它通过以编程方式修改自身和其他“应用程序”而无需通过应用程序商店来“违反服务条款”,因此曾一度在 Play 商店中被暂时禁用。 如评论线程中所述Can an Android app install another android app?

您所说的这个用例正是在 android 中创建快捷方式的原因。

快捷方式是一种不同的生物,正如您所指出的,可以在运行时创建。

这是一篇关于快捷方式及其用法的好文章:http://phandroid.com/2014/03/15/android-101-shortcuts/

这是一个 SO 答案,演示了如何为快捷方式设置自定义文本和图标。 How to change an application icon programmatically in Android? 希望这会有所帮助!

【讨论】:

  • 非常感谢您的意见和回答,此外,感谢您提供的链接。虽然我知道如何添加自定义快捷方式。也许,因为您提到了它,我希望看到一些东西可以在运行时从另一个应用程序中安装(即使使用用户对话框)。如前所述,我不介意我的问题的解决方案是否有点脆弱。 (就像自定义快捷方式一样)
  • 没问题 JacksOnF1re。我更新了答案以反映您的评论。
  • 我很不解,我应该给你们谁的声誉,因为他们都表明你真的考虑过你的答案。我会将这个答案设置为最有帮助的,因为我已经知道别名的可能性以及从另一个应用程序安装应用程序的选项给了我另一个方向的提示。这就是为什么,我认为它值得 50 声望。听起来不多,但大约是我的 25%。因此,谢谢你们俩,即使说谢谢,在这里也不可取。如果这能解决我的问题,我也会将其设置为正确答案。
【解决方案2】:

如果您限制自定义功能的类型和数量,您可以使用活动别名。 但在这种情况下,您应该将 所有 自定义标签和徽标与您的应用程序捆绑在一起,并为每一对创建一个别名。如果您有“通用”自定义功能(例如:“收藏夹”、“朋友”等)并希望拥有关联的应用图标,这可能会起作用。

所有别名都应该在 AndroidManifest.xml 中定义

<activity-alias
        android:name=".Alias0"
        android:label="@string/favourites"
        android:icon="@drawable/favourites"
        android:enabled="true"
        android:targetActivity=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity-alias>

您可以启用/禁用别名

getPackageManager().setComponentEnabledSetting(
            new ComponentName(packagename, aliasname),
            enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);

这是我整理的一个演示:ActivityAliases

查看以“Amazing”开头的应用图标

注意:更新的别名可能需要一些时间才能显示在应用抽屉中,具体取决于您的启动器!

【讨论】:

  • 我也找到了这个解决方案,我认为这是你能做的最多的事情(无根)。但不幸的是,虽然答案很好,但它并没有解决我的问题,因为我不能使用“通用”别名。除非您有在运行时更改标签和图标的想法?
猜你喜欢
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
相关资源
最近更新 更多