Android как программно скрыть значок запуска

Мое приложение предназначено для запуска только один раз. Поэтому я хочу скрыть значок из панели запуска после первого запуска, но без удаления приложения.

Я видел похожие приложения - они могут удалять свои значки из списка приложений запуска. Как я могу достичь таких же результатов? Спасибо.

3 ответа

PackageManager p = getPackageManager();
p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

Обратите внимание, что значок может не исчезнуть до следующей перезагрузки.

Скрыть значок приложения, используя код ниже

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);

В Android Q (API 29) Google изменил поведение видимости значка Launcher. Даже если вы отключите свою Launcher Activity или полностью удалите android.intent.category.LAUNCHER <intent-filter> из всех ваших действий приложение появится в панели запуска и откроет настройки приложения для ОС Android, за исключением:

  • Пакеты, которые не объявляют никаких разрешений в соответствующих файлах манифеста
  • Системные приложения
  • Приложения, которые не содержат компонентов в соответствующем теге манифеста

Скрыть значок приложения с помощью этого кода:

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.

Вы можете получить приложение без модуля запуска, НЕ включив фильтр намерений с MAIN и LAUNCHER в объявление об активности в AndroidManifest - тогда возникает вопрос, как сделать первый запуск. Возможно, виджет?

Другие вопросы по тегам