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 <intent-filter>
从您的所有活动中,应用程序将出现在启动器中并打开 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);
// 在声明为<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);
【讨论】:
【参考方案5】:PackageManager p = getPackageManager();
p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
请注意,该图标可能要等到下次重新启动后才会消失。
【讨论】:
谢谢,但是如果我使用它,我可以通过 Market 更新我的应用程序吗? 那么你如何定义一个快捷键来实际启动你的应用程序 当我这样做并尝试重新安装我的应用程序时,它不起作用。它说活动(被取消的活动)不存在。你能帮忙处理一下吗 OP,请接受其中一个答案,因为它们似乎可以解决您的问题 我真的教过这更复杂,但这个答案完美无缺。注意:当您尝试卸载时由此引起的问题是因为您唯一导出的组件(标有 main 和启动器的活动)被此禁用。您可以添加一些其他导出的组件以返回应用程序(例如为 GCM 或 SMS 接收注册广播接收器)。需要采取类似的方法来重新启用从 Play 商店(甚至是 Eclipse)重新安装,但我不确定需要添加哪些组件。以上是关于Android如何以编程方式隐藏启动器图标的主要内容,如果未能解决你的问题,请参考以下文章