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

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

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

【问题讨论】:

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

标签: android icons launcher


【解决方案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)重新安装,但我不确定需要添加哪些组件。
      猜你喜欢
      • 1970-01-01
      • 2013-10-07
      • 2019-01-24
      • 1970-01-01
      • 2011-08-10
      • 1970-01-01
      • 2012-04-28
      • 2011-01-16
      相关资源
      最近更新 更多