如何隐藏/删除/避免系统应用程序(非 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 问题。
我正在开发一个不包含任何用户界面(仅限服务)的系统应用程序。我在启动时启动我的服务。我通过调用 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 问题。