2012-01-26 2 views
1

В NdefRecord есть новый метод, который позволяет записывать AndroidApplicationRecord в NdefMessage. Это не было необходимо в предварительном Ice-Cream-Sandwich, но с тех пор, если вы хотите обрабатывать определенный URI из тега NFC в своем приложении (например, определенный в фильтре-намерении), он не будет доставлен в ваше приложение, если вы не определите это запись.Совместимость с записью приложений Android с pre-ICS

createApplicationRecord(String packageName); 

Это не доступно с каким-либо пакетом совместимости (я его не нашел), но реализация довольно проста.

Сначала добавьте NdefRecord вы хотите быть читаемым любым NFC устройства (помните, что URI может быть отформатирован/сокращен с URI_PREFIX_MAP)

NdefRecord[] nr = new NdefRecord[2]; 
nr[0] = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], uriBytes); 

Добавить AAR в следующем месте

static final byte[] RTD_ANDROID_APP = "android.com:pkg".getBytes(); 
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
    nr[1] = NdefRecord.createApplicationRecord("your.package.name"); 
else 
    nr[1] = new NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, RTD_ANDROID_APP, new byte[] {}, "your.package.name".getBytes()); 

ответ

1

Вам не нужен AAR для обработки определенного URI. AAR - это еще один способ гарантировать, что ваше приложение запускается вместо другого приложения, которое может обрабатывать один и тот же URI.

0

AAR гарантирует ICS, что ваше приложение получает сообщение NDEF. Он также не должен быть первой записью в сообщении NDEF (что будет соответствовать фильтру Intent). Таким образом, он сильно отличается от соответствия типа URI или MIME в фильтре Intent. Тем не менее, AAR использует внешний тип для записи NDEF, что является видом записи, которая не поддерживается до ICS. Поэтому обычно вы не должны использовать его в качестве первой записи вашего сообщения NDEF, если вы хотите, чтобы он работал с устройствами до ICS.

Смежные вопросы