J'utilise l'assistant de liens d'application dans Android Studio pour configurer les liens qui seront ouverts via mon application.

Tout fonctionne bien.

Mais mon problème est que lorsque j'ouvre le lien via l'application, cela ouvre l'activité définie dans l'application précédente où j'ai cliqué sur le lien.

Par exemple:

Si je clique sur un lien dans WhatsApp, je vois quelque chose comme ceci:

open link

Et lorsque j'ouvre à l'aide de l'application, l'application s'ouvre dans WhatsApp comme le montre cette image:

whatsapp opens

Alors, comment puis-je ouvrir l'application uniquement dans mon application et non dans WhatsApp ou une autre application?

Voici mon code AndroidManifest.xml de cette activité:

 <activity android:name=".extraLinks"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
        >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:scheme="http"
                android:host="www.jtube.live" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:scheme="https"
                android:host="www.jtube.live" />
        </intent-filter>
       
    </activity>

mise à jour: j'ai vérifié mes applications Gmail et Chrome et si j'ouvre à partir de ces applications, cela fonctionne bien, donc mon problème avec l'application Whatsapp uniquement ...

2
Fox 2 oct. 2020 à 14:42

2 réponses

Meilleure réponse

Lorsque l'activité A démarre l'activité B, le comportement par défaut est:

Une nouvelle instance de l'activité B est créée dans une tâche en cours et placée dans la pile arrière.

Pour personnaliser ce comportement, il existe quelques options:

  • ajouter des indicateurs à l'intention qui démarre une activité spécifique;
  • définir l'attribut launchMode pour une activité en cours de démarrage;

La première option est hors de votre contrôle lorsque nous parlons d'autres applications.

Vous êtes confronté à un comportement différent dans les applications WhatsApp et Gmail pour les raisons suivantes:

Gmail personnalise les intentions pour chaque lien HTTP avec FLAG_ACTIVITY_NEW_TASK et, par conséquent, l'activité dans votre application démarre dans une nouvelle tâche. L'application WhatsApp ne spécifie pas cet indicateur lorsqu'elle démarre une activité qui gère un lien HTTP spécifique.

Dans votre cas, la seule façon de personnaliser ce comportement est de jouer avec l'attribut launchMode pour l'activité cible qui gère le lien de l'application. Il existe deux valeurs possibles applicables à votre cas: singleTask ou singleInstance.

Consultez ces liens pour comprendre comment cela fonctionne:

2
Николай Гольцев 7 oct. 2020 à 17:11

Essaye ça:

<intent-filter android:label="app_label">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.LAUNCHER"/>
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data
       android:scheme="https"
       android:host="www.jtube.live" />
</intent-filter>
0
Joseph Utulu 7 oct. 2020 à 17:08