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

Posted

技术标签:

【中文标题】Android如何以编程方式隐藏启动器图标【英文标题】:Android how to programmatically hide launcher icon 【发布时间】:2011-12-29 09:51:56 【问题描述】:

我的应用程序设计为只需要运行一次。因此,我想在第一次运行后从启动器中隐藏图标,但不卸载应用程序。

我见过类似的应用程序——它们可以从启动器应用程序列表中删除自己的图标。我怎样才能达到相同的结果?谢谢。

【问题讨论】:

老实说,出于好奇,从未见过这种情况:你能说出一两个可以做到这一点的应用吗? 我也很好奇,请说出一两个可以从启动器应用列表中删除自己图标的应用。谢谢 ***.com/questions/1103027/… 很遗憾,我忘记了哪个应用程序,但如果我再次遇到它,我会在这里回复... 应用程序是“Smart Keyboard Pro”。在其设置中,有一个删除启动器图标的选项。 【参考方案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

【讨论】:

android 10 是否有可能隐藏具有管理员权限或类似的图标?【参考方案2】:

使用 Android Q (API 29) Google changed the Launcher icon visibility 行为。即使您禁用启动器活动或完全删除 android.intent.category.LAUNCHER &lt;intent-filter&gt; 从您的所有活动中,应用程序将出现在启动器中并打开 Android 操作系统应用程序设置,但以下情况除外:

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

【讨论】:

【参考方案3】:

您可以通过在 AndroidManifest 中的 Activity 声明中不包含带有 MAIN 和 LAUNCHER 的意图过滤器来拥有一个没有启动器的应用程序 - 那么问题就变成了如何进行第一次启动.. Widget 可能吗?

【讨论】:

我认为 OP 并不是指“在桌面上”创建的图标,而是“应用程序抽屉”中的图标。另外..也许您可以在安装后使用Play商店中的“打开”按钮打开它。【参考方案4】:

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

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

// 在声明为&lt;category android:name="android.intent.category.LAUNCHER" /&gt;的清单文件中首次打开的活动

这里是如何恢复应用程序的图标

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

【讨论】:

【参考方案5】:
PackageManager p = getPackageManager();
p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

请注意,该图标可能要等到下次重新启动后才会消失。

【讨论】:

谢谢,但是如果我使用它,我可以通过 Market 更新我的应用程序吗? 那么你如何定义一个快捷键来实际启动你的应用程序 当我这样做并尝试重新安装我的应用程序时,它不起作用。它说活动(被取消的活动)不存在。你能帮忙处理一下吗 OP,请接受其中一个答案,因为它们似乎可以解决您的问题 我真的教过这更复杂,但这个答案完美无缺。注意:当您尝试卸载时由此引起的问题是因为您唯一导出的组件(标有 main 和启动器的活动)被此禁用。您可以添加一些其他导出的组件以返回应用程序(例如为 GCM 或 SMS 接收注册广播接收器)。需要采取类似的方法来重新启用从 Play 商店(甚至是 Eclipse)重新安装,但我不确定需要添加哪些组件。

以上是关于Android如何以编程方式隐藏启动器图标的主要内容,如果未能解决你的问题,请参考以下文章

如何在主菜单android中以隐藏图标模式启动应用程序

Android以编程方式隐藏/取消隐藏应用程序图标

如何在android中可见/不可见启动器图标?

以编程方式更改程序图标

Android如何做到应用程序图标隐藏,由第三方程序启动

Android - 如何以编程方式启动设备“文件系统”?