2015-05-30 2 views
-1

Возможно ли отправить сообщение NDEF без ввода от пользователя?NFC - Отправить тег или сообщение NDEF по адресу

Я хотел бы использовать NFC в следующем сценарии: пользователь подключает устройство к считывателю NFC. Читатель NFC получает сообщение как ответ.

По сути, я хочу, чтобы устройство работало как тег i.e без ввода от пользователя.

Я знаю, что KitKat 4.4 поддерживает HCE (эмуляция хост-карты), хотя мне бы хотелось получить решение с большей поддержкой устройств, например, сообщениями NDEF.

ответ

1

Когда Android устройство получает NDEF сообщений (, например, путем чтения тега NFC) обрабатывает его через механизм диспетчеризации для определения активности для запуска.

Использование NdefMessage(byte[]) построить ЦНК сообщение из двоичных данных или NdefMessage(NdefRecord[]) построить из один или более NdefRecords.

Тип первой записи сообщения имеет особое значение для отправки сообщений, поэтому тщательно создайте эту запись. Получите записи NDEF внутри этого сообщения NDEF.

NdefMessage всегда один или несколько ЦНК записи: поэтому следующий код для извлечения первой записи всегда безопасно (нет необходимости проверять для нулевой или массива длины> = 1):

NdefRecord firstRecord = ndefMessage.getRecords()[0]; 

Возврат: массив из одной или нескольких записей NDEF.

Один отводов подход не возможен при использовании Beam на два Android устройств

(отметить, что с другими устройствами, в частности, если один Android и один является специализированным для чтения NFC, или устройство, в котором вы можете управлять функциональностью NFC на низком уровне или устройством, которое эмулирует тег NFC).

Тем не менее, между двумя устройствами Android возможен только двухтактный подход с небольшими изменениями в вашем существующем сценарии.

Вам просто нужно добавить передний план отправки, который перехватывает ваши входящие сообщения ЦНКА и, следовательно, предотвращает Android от перезагрузки активности:

@Override 
public void onResume() { 
    super.onResume(); 
    NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this); 
    PendingIntent pi = PendingIntent.getActivity(
      this, 
      0, 
      new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 
      0); 
    adapter.enableForegroundDispatch(this, pi, null, null); 
} 
Смежные вопросы