如何在Android中以编程方式隐藏启动器图标

48

我的应用程序只需运行一次。因此,我希望在第一次运行后隐藏启动器中的图标,但不卸载该应用程序。

我看过类似的应用程序-它们可以从启动器应用程序列表中删除自己的图标。我该如何实现相同的结果?谢谢。


7
老实说我从未见过这样的情况,出于好奇:你能否列举一两个可以做到这一点的应用程序? - user658042
我也很好奇,请给出一个或两个可以从启动器应用列表中删除其自己图标的应用程序。谢谢。 - Houcine
https://dev59.com/LnNA5IYBdhLWcg3wEZiT - Arun Badole
1
很不幸,我忘记了是哪个应用程序,但如果我再遇到它,我会在这里回复。 - user1047351
1
该应用是“Smart Keyboard Pro”。在其设置中,有一个选项可以删除启动器图标。 - user1047351
5个回答

65
PackageManager p = getPackageManager();
p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

请注意,在下一次重启之前,图标可能仍然存在。


1
那么,你如何定义一个快捷键来实际启动你的应用程序呢? - png
3
当我这样做并尝试重新安装我的应用程序时,它无法工作。它说活动(被禁用的那个)不存在。请问如何处理这个问题? - png
4
请采纳其中一个答案,因为它们似乎解决了你的问题。 - Dheeraj Bhaskar
我也遇到了和 @pintu 一样的问题。 - Shivang Gupta
1
我本以为这更加复杂,但这个答案完美地解决了问题。请注意:当您尝试卸载时,由此引起的问题是因为您唯一导出的组件(标有主和启动器的活动)被禁用了。您可以添加其他导出组件以重新进入应用程序(例如为GCM或SMS接收注册广播接收器)。需要类似的方法来重新启用从Play商店(甚至从Eclipse)重新安装,但我不确定需要添加哪个组件。 - Igor Čordaš
显示剩余7条评论

13

使用下面的代码隐藏应用程序图标

PackageManager pkg=this.getPackageManager();
pkg.setComponentEnabledSetting(new ComponentName(this,SplashActivity.class),PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                        PackageManager.DONT_KILL_APP);

// 在manifest文件中第一次声明为<category android:name="android.intent.category.LAUNCHER" />的活动

以下是如何恢复应用程序图标的方法

PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this,SplashActivity.class);
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

10

随着Android Q(API 29),谷歌改变了启动器图标的可见性。即使禁用启动器活动或从所有活动中完全删除 android.intent.category.LAUNCHER <intent-filter>,该应用程序仍将出现在启动器中并打开Android操作系统应用程序设置,但有以下例外:

  • 在其各自的清单文件中未声明任何权限的软件包
  • 系统应用程序
  • 不包含其各自清单标签内任何组件的应用程序

1
您可以在AndroidManifest中Activity的声明中不包含MAIN和LAUNCHER的intent filter,从而实现没有启动器的应用程序-问题则变成如何进行第一次启动..也许是小部件?

1
我认为 OP 没有指 "桌面上" 创建的图标,而是指 "应用抽屉" 中的图标。另外...也许你可以在安装后使用 Play 商店中的 "打开" 按钮打开它。 - Dev-iL

1

使用以下代码隐藏应用程序图标:

PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class); // activity which is first time open in manifiest file which is declare as <category android:name="android.intent.category.LAUNCHER" />
p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

并将其带回来,附上这个:

PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class);
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

注意:这不适用于Android 10


1
有没有可能通过管理员权限或类似方式在Android 10中隐藏图标? - Ahmad

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