Cómo hacer que la aplicación de Android tenga dos entradas

Al usar el famoso canario de fugas para detectar fugas de memoria, descubrimos que después de agregar la dependencia de canario de fugas, cuando la aplicación se ejecuta nuevamente, habrá un ícono de aplicación adicional en el escritorio.

fuga canario

Abra la aplicación Leaks para ver las fugas de memoria en su aplicación.

Que haya un ícono de aplicación más en el escritorio, ¿cómo se hace esto?

La respuesta es usar activity-alias.

1. Establecer dos entradas para la aplicación y comenzar dos actividades respectivamente

Por ejemplo, especificando otro punto de entrada activity-aliaspara la aplicación:

<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name=".SecondActivity"
    android:exported="false"
    android:taskAffinity="second.affinity"/>
<activity-alias
    android:name="SecondActivity"
    android:exported="true"
    android:icon="@mipmap/ic_launcher"
    android:label="SecondActivity"
    android:targetActivity=".SecondActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>
复制代码

Se puede ver que la entrada de la aplicación es MainActivity, pero también configuramos el filtro de intención de la entrada de la aplicación para SecondActivity a través del alias de actividad.Después de la instalación, habrá dos entradas en el escritorio:

actividad-alias

Al hacer clic en los dos iconos, se iniciarán dos actividades diferentes. Aquí, taskAffinity también se configura para SecondActivity, de modo que cuando se inicia SecondActivity, se coloca en una nueva pila.

2. Configure dos entradas para la aplicación e inicie la misma Actividad

activity-aliasAl agregar una entrada, ¿es necesario iniciar una actividad diferente?

La respuesta no es necesariamente. activity-aliasTambién nos permite definir múltiples alias para una misma Actividad, para lograr el efecto de que una aplicación tenga múltiples íconos o múltiples entradas de inicio.

<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity-alias
    android:name=".Alias"
    android:icon="@mipmap/ic_chrome"
    android:label="Fake Chrome"
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity-alias>
复制代码

Se puede ver que la entrada de la aplicación es MainActivity, pero configuramos un alias para MainActivity a través de activity-alias.Después de la instalación, habrá dos entradas en el escritorio:

actividad-alias

Al hacer clic en ambos íconos, se iniciará la misma Actividad.

3. ¿Qué más puede hacer el alias de actividad?

Si necesitamos configurar una actividad para permitir la apertura de una página web, generalmente usamos este enfoque:

<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
    </intent-filter>
</activity>
复制代码

Aquí, se agrega a MainActivity un filtro de intenciones que admite la apertura de páginas web. Después de ejecutar, cuando se encuentra una solicitud para abrir un enlace, aparecerá un cuadro de diálogo como este:

abrir con

Además de este método, el alias de actividad también puede lograr la misma función.

<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity-alias
    android:name=".browser"
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
    </intent-filter>
</activity-alias>
复制代码

Además, el alias de actividad también puede agregar una descripción de etiqueta a nuestra aplicación.

<activity
    android:name=".MainActivity"
    android:exported="true"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity-alias
    android:name=".browser"
    android:label="My Browser"
    android:targetActivity=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http" />
    </intent-filter>
</activity-alias>
复制代码

Abra el enlace en este momento, y nuestra etiqueta recién agregada se mostrará en la parte inferior de Mi aplicación: Mi navegador:

mi navegador

Cuatro Resumen

activity-alias proporciona más flexibilidad y personalización a la aplicación. Usando el alias de actividad, podemos definir múltiples entradas para una actividad, mejorando así la experiencia del usuario de la aplicación.

5. Artículos de referencia

# Conocimiento frío: cómo lograr el efecto de agregar una "nueva aplicación" al escritorio de LeakCanary

Supongo que te gusta

Origin juejin.im/post/7226911455878479931
Recomendado
Clasificación