Выберите запись NDEF для чтения в сообщении NDEF?

Я разработал 2 приложения для Android. Первый для записи в тег NFC, а второй для чтения содержимого, которое я написал.

Итак, * Первое приложение (WriteNFC): я записываю в тег одно сообщение NDEF, которое включает две записи NDEF: первая запись имеет тип «текст», а вторая — тип «URL».

Второе приложение (ReadNFC): я сканирую тег, чтобы прочитать сообщение NDEF, и отобразить его, но не полностью. Я отображаю на экране только вторую запись (URL). Что я хотел бы сделать, так это то, что когда пользователь выбирает другое приложение для Android, которое он установил для чтения тегов NFC, оно должно отображать только первую запись (текст), а не вторую (URL)?

В итоге, когда мы сканируем тег NFC, с помощью моего приложения (ReadNFC) мы можем видеть только URL-адрес (http://www.stackoverflow.com), а с другими приложениями мы можем видеть только текст (Hello World) .


person mOmO    schedule 29.11.2012    source источник


Ответы (2)


Это невозможно при использовании стандартных типов записей NDEF Text и URI.

Но вы можете создавать свои собственные типы полезной нагрузки записи, используя запись внешнего типа или запись неизвестного типа, которые может использовать только ваше приложение.

Также ознакомьтесь с записью приложения Android.

person ThomasRS    schedule 29.11.2012
comment
Я использовал TNF_MIME_MEDIA для первой записи и TNF_EXTERNAL_TYPE для второй. Это все еще не работает, когда я использую родное приложение. У меня есть текст в первом поле и ниже типа неизвестного тега. Как я могу это скрыть? - person mOmO; 29.11.2012
comment
В NDEF нельзя ничего скрыть, можно зашифровать свои данные. - person ThomasRS; 29.11.2012
comment
Когда вы говорите «зашифровать», вы имеете в виду отображение чего-то вроде «Неизвестный тип тега»? - person mOmO; 29.11.2012
comment
Ошибка больше похожа на помещение зашифрованных данных в неизвестную запись. Это предотвратит чтение ваших данных другими приложениями. - person ThomasRS; 29.11.2012
comment
Можете ли вы быть более точным, приведя пример, плз - person mOmO; 29.11.2012

Это то, что я сделал в первом приложении (WriteNFC)

private NdefRecord createRecord1(String data)
{  
   byte[] payload = data.getBytes(Charset.forName("UTF-8"));
   byte[] empty = new byte[] {};
   return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, empty, empty, payload);
}
private NdefRecord createRecord2(String data)
{  
   byte[] payload = data.getBytes(Charset.forName("UTF-8"));
   byte[] empty = new byte[] {};
   return new NdefRecord(NdefRecord.TNF_ABSOLUTE_URI, payload, empty, empty);
}

И для во втором приложении (ReadNFC)

NdefRecord cardRecord = msg.getRecords()[1];//Extract the second Record
String url_data = new String(cardRecord.getType());//Read data type

Результат:

Когда я читал с помощью своего собственного приложения (ReadNFC), конечно, у меня на экране была только полезная нагрузка второй записи, которую я сохранил через «Тип записи». А вот со сторонним приложением, тем более родно установленным ("тэг"), корректно отображает первую запись, а для второй - пустое поле. Итак, он все еще не работает, потому что все еще видит вторую запись screenshot

person mOmO    schedule 07.12.2012
comment
Когда я использую TNF_UNKNOWN или TNF_EXTERNAL_TYPE, он отображает неизвестный тег как вторую запись! Как полностью скрыть вторую запись от других приложений? - person mOmO; 07.12.2012