2017-01-23 2 views
0

Je veux implémenter p2p entre deux applications Android en utilisant NFC.Android nfc envoyer un message à et de HCE?

J'ai essayé les applications cardemulator (https://github.com/googlesamples/android-CardEmulation) et cardreader (https://github.com/googlesamples/android-CardReader). ils fonctionnent bien.

Mais dans cet exemple, il est seulement envoyer des données de cardemulator à lecteur de cartes. Je veux faire l'inverse également.

Est-il possible d'envoyer des données supplémentaires dans la commande apdu? Le champ de données contient maintenant l'aide, si je change cela ou met des données supplémentaires après l'aide, mon application va bien sûr changer l'aide, ainsi elle ne se connectera pas.

Dois-je envoyer une commande supplémentaire avec mes données?

ou n'est-ce pas possible?

+0

avez-vous résolu de la même façon? – firegloves

+0

Que voulez-vous dire? Je ne l'ai pas résolu. Maintenant, je peux seulement envoyer dans une direction (en lisant la carte émulée). – Han

+0

Je sais que vous avez essayé et trouvé une solution avec les commandes apdu, si oui faites le moi savoir s'il vous plaît – firegloves

Répondre

0

NFC Peer 2 Le mode Peer n'est pas la même chose que le mode Lecteur de carte NFC.

Si vous souhaitez envoyer des données entre deux applications Android, vous devez utiliser Android Beam pour fonctionner en mode Peer 2 Peer.

Commencez par ici pour en savoir plus sur LLCP and SNEP protocols.

Fondamentalement, ce dont vous avez besoin est d'envoyer NDEFMessage d'un appareil à l'autre en utilisant les méthodes de rappel Android.

Pour envoyer un NDEFMessage avec Android Beam vous devez implémenter ces deux interfaces:

CreateNdefMessageCallback 
OnNdefPushCompleteCallback 

Dans createNdefMessage() méthode, vous devez créer et renvoyer un NDEFMessage à envoyer (here vous pouvez trouver une description).

Dans onNdefPushComplete() méthode que vous pouvez faire quelque chose sur NDEFMessage envoi terminé.

Ce dont vous avez besoin est d'identifier quel périphérique agira en tant qu'initiateur, puis en createNdefMessage() vous devriez retourner un message NDEF à envoyer à l'autre périphérique.

Sur le périphérique de réception (dans le périphérique cible NFC appelé), vous devez recevoir NDEFMessage dans Activity.onNewIntent(Intent intent) et gérer cela.

Ensuite, vous pouvez faire la même chose de l'autre côté.

En théorie, en utilisant le protocole SNEP, vous devriez être en mesure d'envoyer des requêtes SNEP GET, mais sur Android, cette fonctionnalité a été désactivée. Vous pouvez lire ici une discussion sur Android SNEP implementation

Gardez à l'esprit que pour pouvoir recevoir un message NDEF, vous devez définir un IntentFilter dans yout manifest.xml en spécifiant quel NDEFMessage votre activité doit "intercepter".Ceci est un exemple pour attraper AndroidApplicationRecord NDEFMessage:

<intent-filter> 
    <action android:name="android.nfc.action.NDEF_DISCOVERED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="application/com.example.android.beam" /> 
</intent-filter> 

Cocher cette Android Beam Example

espoir qui aide

+0

Je sais, mais je ne veux pas utiliser le faisceau Android. Il est donc possible d'interagir avec le lecteur, sans pousser sur l'écran. C'est pourquoi je regarde lecteur Android et HCE. – Han