Проблема с вашим методом записи URL в тег NFC заключается в том, что вы, похоже, скопировали его из кода, который изначально предназначался для записи записей NFC Forum Text .Это также подтверждается тем фактом, что ваш метод первоначально назывался «create Text Record» (по крайней мере, это то, что вы называете в createNdefMessage
).
Теперь проблема сэто то, что текстовые записи и записи URI имеют совершенно другой формат.Следовательно, если вы поместите полезную нагрузку текстовой записи в запись URI, вы получите неожиданный результат.В вашем случае байт состояния (первый байт текстовой записи, содержащий размер языкового поля) был сопоставлен с кодом идентификатора записи URI.Поскольку значение этого поля было 0x02, оно было переведено в префикс URI "https://www.".. Более того, само поле языка (содержащее код языка" en ") было добавлено в URI.
Как правило, вы хотите использовать метод NdefRecord.createUri()
для создания правильной записи URI для вашего URL.Это автоматически позаботится о нормализации и сжатии URI в соответствии со схемой сжатия определения типа записи URI Forum NFC.
NdefRecord ndefRecord= NdefRecord.createUri("https://indies.net.in");
Однако, если вам необходимо поддерживать платформы до API 14 (где был представлен этот метод), вы также можете создать запись URI вручную. Например, если вас не интересует сжатие, вы можете использовать:
private NdefRecord createUrlRecord(String url) {
byte[] uriBytes = content.getBytes("UTF-8");
byte[] payload = new byte[uriBytes.length + 1];
payload[0] = (byte)0x00;
System.arraycopy(uriBytes, 0, payload, 1, uriBytes.length);
return new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
NdefRecord.RTD_URI,
null,
payload);
}
NdefRecord ndefRecord= createUrlRecord("https://indies.net.in");