Solución:
Ocultar el icono de la aplicación usando el siguiente código:
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);
A continuación se explica cómo recuperar el icono de la aplicación.
PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class);
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
Edición importante:
Según los documentos, a partir de Android Q (API 29), todos los íconos de las aplicaciones estarán visibles en el lanzador sin importar qué, a menos que:
A partir de Android Q, al menos una de las actividades de la aplicación o actividades sintetizadas aparece en la lista devuelta a menos que la aplicación cumpla al menos una de las siguientes condiciones:
- La aplicación es una aplicación del sistema.
- La aplicación no solicita ningún permiso.
- La etiqueta en el manifiesto de la aplicación no contiene ningún elemento secundario que represente componentes de la aplicación.
Además, el sistema oculta actividades sintetizadas para algunas o todas las aplicaciones en los siguientes casos relacionados con la empresa:
- Si el dispositivo es un dispositivo totalmente administrado, no aparecen actividades sintetizadas para ninguna aplicación en la lista devuelta.
- Si el usuario actual tiene un perfil de trabajo, no aparece ninguna actividad sintetizada para las aplicaciones de trabajo del usuario en la lista devuelta.
La mejor manera de ocultar el icono de la aplicación desde el lanzador que puede usar
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
En su actividad principal manifiesta
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter>
</activity>
también agregue la función de usos en Manifest
Etiqueta
<uses-feature
android:name="android.software.leanback"
android:required="true" />
Para ocultar el icono use esto:
PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class);
p.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
y para mostrar el icono:
PackageManager p = getPackageManager();
ComponentName componentName = new ComponentName(this, com.apps.MainActivity.class);
p.setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
IMPORTANTE:
De alguna manera es complicado si necesita hacer algo con la actividad principal en su aplicación cuando está oculta. te enfrentarás a un ActivityNotFoundException
. para que funcione, debe mostrar el ícono antes de hacer algo en su actividad principal y volver a ocultarlo una vez que haya terminado.
pasos sencillos: 1 llamada recibida aquí
2-mostrar icono
Actividad principal de 3 lanzamientos
4-haz tus cosas en la actividad principal
5-ocultar el icono de nuevo