2015-08-10 4 views
4

У меня есть приложение, которое использует NFC. Я хочу ограничить взаимодействие NFC с другими устройствами, которые работают с одним и тем же действием моего приложения.Как разрешить взаимодействие NFC с устройствами, которые работают с одним и тем же приложением/активностью

Проблема

На данный момент, если я использую устройство , который имеет Chrome открыто и мое устройство B работает мое приложение, то Chrome будет по-прежнему обнаружить данные, посланные мое приложение через 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; 
} 

В приведенном выше коде я отправляю сообщение NFC независимо от того, какую активность имеет другое устройство. Может быть, есть способ подождать ответа?

ответ

1

Вы не можете. Это сторона читателя (тег)/приемник (одноранговая), которая определяет, какое приложение обрабатывает событие NFC. На Android это делается фильтрами намерений, системой отправки переднего плана и API-интерфейсом считывателя. Посредством последних двух операций переднего плана всегда могут запрашивать приоритет над всеми другими приложениями. Нет ничего, что вы могли бы сделать, чтобы этого не случилось. Кроме того, одноранговый режим на Android (Android Beam) по существу позволяет использовать только однонаправленный обмен сообщениями, поэтому вы не выполняете никакого рукопожатия.

Хотя не непосредственно предотвращение связи с приложением с помощью других приложений, есть несколько вариантов, хотя:

  1. Использования шифрования для визуализации данных, которые вы отправляете через NFC непригодными для любого принимающего приложения, которое не знает ключ дешифрования.

  2. Используйте ридер-режим с одной стороны + HCE с другой стороны. Таким образом, вы можете выполнить некоторое рукопожатие, установить аутентифицированный канал и т. Д. И используя свой собственный идентификатор приложения для стороны HCE, вы делаете менее вероятным, что другое приложение даже пытается получить доступ к вашему приложению.