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 - тогда возникает вопрос, как сделать первый запуск. Возможно, виджет?