如何隐藏/删除/避免系统应用程序(非 UI)在 Android 应用程序抽屉中获取 listed/shown?

How to Hide/ Remove/ Avoid System App (non UI) getting listed/shown in Android app drawer?

我正在开发一个不包含任何用户界面(仅限服务)的系统应用程序。我在启动时启动我的服务。我通过调用 finish() 方法立即终止启动器 activity。 此外,我正在使用以下代码从 launcher/app 抽屉中删除图标。

PackageManager packageManager = getPackageManager();

ComponentName componentName = new ComponentName(this.getApplicationContext(), MainActivity.class);

packageManager.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

实施没有问题,一切正常。但是我无法在已经安装此应用程序的设备上重新安装 apk,除非卸载该应用程序并重新安装它。

我的问题是 Android 设备中有很多应用程序未在应用程序抽屉中列出,尤其是系统应用程序和一些已下载的应用程序。(例如从 playstore 下载的少数键盘应用程序)。

我想知道这是实现这一目标的唯一方法吗?或者是否有任何其他方法可以将应用程序声明为非 UI 应用程序(以避免在应用程序抽屉中获得 listed/shown)在 AndroidMainfest 的某个地方?

在相关 activity 的 android 清单中删除 Launcher intent 过滤器:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

试试这个方法。完全删除此行。因为这不是从应用程序抽屉中隐藏您的应用程序图标的最佳主意。正如您提到的,它可能会在应用程序更新过程中导致一些问题。

PackageManager packageManager = getPackageManager();

ComponentName componentName = new ComponentName(this.getApplicationContext(), MainActivity.class);
     packageManager.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

此外,从您的主要 activity 意图过滤器标签中删除以下 "category.LAUNCHER" 行(在 Mainifest.xml)

<category android:name="android.intent.category.LAUNCHER" />

确保你的主 activity 标签中有“.action.MAIN”

例如,您可以简单地将此代码替换为您当前的主标签 activity。清单

<intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.INFO" /> <!-- optional--> 
</intent-filter>

在此之后,您的应用将不会列在应用抽屉中,因为您的应用不包含可启动项 activity。这样,您也可以避免您提到的 reinstalling/updating 问题。