2015-08-10 3 views
4

J'ai une application qui utilise NFC. Je veux limiter les interactions NFC à d'autres périphériques qui sont sur la même activité de mon application.Comment autoriser uniquement l'interaction NFC avec des périphériques ayant la même application/activité en cours

Problème

Au moment si j'utilise un dispositif Une qui a Chrome ouvert et mon appareil B exécutant mon application, Chrome détecte toujours les données envoyées par mon application sur NFC. Comment puis-je dire "si vous n'utilisez pas mon application, vous ne pouvez pas interagir avec NFC"?

@Override 
public NdefMessage createNdefMessage(NfcEvent event) 
{ 
    String stringOut = getMacAddress(this); 
    byte[] bytesOut = stringOut.getBytes(); 

    NdefRecord ndefRecordOut = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, "text/plain".getBytes(), new byte[] {}, bytesOut); 

    NdefMessage ndefMessageOut = new NdefMessage(ndefRecordOut); 

    return ndefMessageOut; 
} 

Dans le code ci-dessus, j'envoie le message NFC quelle que soit l'activité de l'autre périphérique. Peut-être qu'il y a un moyen d'attendre une réponse?

Répondre

1

Vous ne pouvez pas. C'est le côté lecteur (tag)/récepteur (peer-to-peer) qui détermine quelle application gère un événement NFC. Sur Android, cela est fait par des filtres d'intention, par le système de répartition de premier plan et par l'API en mode lecteur. Par ces deux derniers, les activités de premier plan peuvent toujours demander la priorité sur toutes les autres applications. Il n'y a rien que vous puissiez faire pour empêcher cela. De plus, le mode peer-to-peer sur Android (Android Beam) ne permet essentiellement que l'échange unidirectionnel de messages, de sorte que vous n'effectuez pas vraiment de prise de contact.

sans empêcher directement la communication avec votre application par d'autres applications, il y a quelques options que:

  1. Utilisez le cryptage pour rendre les données que vous envoyez à travers NFC inutilisable pour une application de réception qui ne connaît pas la clé de déchiffrement.

  2. Utiliser le mode lecteur d'un côté + HCE de l'autre côté. De cette façon, vous pouvez effectuer une poignée de main, établir un canal authentifié, etc. Et en utilisant votre propre identifiant d'application pour le côté HCE, il est moins probable qu'une autre application essaie même d'accéder à votre application.