2016-12-28 1 views
2

Je développe une application Android qui nécessite un lien profond avec un tag NFC.Lien profond dans l'application (activité spécifique) par tag NFC

Ici vous pouvez voir mon filtre intention de l'activité:

<activity 
    android:name=".ui.schedule.ScheduleActivity" 
    android:parentActivityName=".ui.home.HomeActivity"> 

    <intent-filter android:label="testDeepLink"> 
     <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.testdeeplink.com" 
      android:pathPrefix="/schedule"/> 

    </intent-filter> 

</activity> 

Maintenant, quand je commence cette commande dans AdB l'application commence par l'activité correcte (ScheduleActivity):

adb shell am start -W -a android.intent.action.VIEW -d "http://www.testdeeplink.com/schedule?stop_id=1" com.exmemple.android 

Mais quand Je code l'URL sur une balise NFC, en scannant cette balise commence juste le navigateur web de mon téléphone. Qu'est-ce qui me manque pour commencer l'activité avec le tag NFC?

URL codées sur l'étiquette: « http://www.testdeeplink.com/schedule?stop_id=1 »

Répondre

1

Il vous manque pour mettre un filtre NFC dans l'intention de votre manifeste. Les URL sur les tags NFC ne déclenchent pas une action d'intention VIEW. Au lieu de cela, ils seront envoyés aux activités avec l'action d'intention NDEF_DISCOVERED. Par conséquent, vous pouvez recevoir une telle intention NFC en mettant un filtre intention d'action supplémentaire NDEF_DISCOVERED dans votre manifeste:

<activity 
    android:name=".ui.schedule.ScheduleActivity" 
    android:parentActivityName=".ui.home.HomeActivity"> 

    <intent-filter android:label="testDeepLink"> 
     <action android:name="android.intent.action.VIEW" /> 
     ... 
    </intent-filter> 
    <intent-filter android:label="testDeepLinkNFC"> 
     <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:scheme="http" 
       android:host="www.testdeeplink.com" 
       android:pathPrefix="/schedule" /> 
    </intent-filter> 

Notez qu'il semble y avoir des problèmes (non confirmés?) Avec certains appareils fonctionnant sous Android 6.0+ où le Le navigateur semble détourner les URL des tags NFC malgré les filtres d'intention NDEF corrects. Je n'ai pas vécu cela jusqu'à présent, donc je n'ai pas pu approfondir cette question.

+0

Merci, votre solution fonctionne mais pour être sûr que le navigateur ne détourne pas l'intention j'ai utilisé une URL spécifique à la place, quelque chose comme: "testdeeplink: // schedule? Stop_id = 1" Et maintenant, il fonctionne –

+0

@ Sagonnicolas Ouais, en utilisant votre propre schéma empêchera certainement le lien d'être traité par le navigateur. Une alternative serait d'ajouter un enregistrement d'application Android (AAR) pour votre application * après votre enregistrement d'URL * sur l'étiquette. Cela permettra également à un appareil d'ouvrir votre application dans Play Store si l'application n'est pas installée sur l'appareil. –