2012-02-05 1 views
2

Я обнаружил, что когда я положил Nexus S (под управлением Android 2.3.6) рядом с тегом NFC, в котором содержится сообщение NDEF с URI-записью, указывающей на веб-сайт, это вызовет (как и ожидалось) выбор NFC-активности NFC (поскольку у меня установлено несколько приложений для чтения NFC, и я работаю над своим собственным приложением, которое также перехватывает обнаруженные теги NFC).Обнаружение NFC для Android 2.3.6 и 4.x

Однако, с помощью Galaxy Nexus (Android v4, Ice Cream Sandwich), выбор активности НЕ появляется. Он просто запустит браузер. LogCat покажет это:

D/NfcService(438): TAG: Tech [android.nfc.tech.MifareUltralight, android.nfc.tech.NfcA, android.nfc.tech.Ndef] 
I/ActivityManager(196): START {flg=0x10008000 cmp=com.android.nfc3/com.android.nfc.NfcRootActivity (has extras)} from pid 438 
I/ActivityManager(196): START {act=android.nfc.action.NDEF_DISCOVERED dat=http://www.someURL.com/someotherstuff cmp=com.google.android.browser/com.android.browser.BrowserActivity (has extras)} from pid 438 

Так что это дает мне два вопроса:

а) Android 2.3.6 и 4.x решили вести себя по-другому, becaaaause ...?

б) Даже когда я пытаюсь ограничить мое приложение, чтобы соответствовать только метки NFC, которые содержат множество www.someURL.com, то есть, поставив

<data 
    android:host="www.someURL.com" 
    android:pathPattern="/*" 
    android:scheme="http" /> 

в моих 3 намеренных фильтров (один для TAG_DISCOVERED, один для TECH_DISCOVERED, один для NDEF_DISCOVERED, я действительно пытаюсь привлечь внимание к выбору NFC-активности там ...), результат не изменится. Он просто откроет браузер. Банкомат - единственное, что работает, - это переподготовка ...

Любые идеи?

ответ

2

Возможно, вы должны использовать «android: pathPrefix» вместо «android: pathPattern». Вы теперь соответствуете 0 или более вхождений «/» ...

+0

Именно эта проблема была. теперь я использую 'android: pathPrefix ="/someotherstuff "'. В префиксе не требуется «*». – NameZero912

2

Ваше наблюдение верно:

а) Android 2.3.6 и 4.x решили вести себя по-другому, becaaaause ...?

Поскольку в Android 4.0.x поведение для входящих сообщений NDEF было оптимизировано для лучшего удобства пользователей. Android обнаруживает несколько типов сообщений и передает данные непосредственно во встроенные приложения.

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

Вы можете переопределить это встроенное поведение, включив отправку переднего плана и, при этом ваше приложение работает с фокусом.

+0

Я вижу. Не могли бы вы рассказать, что вы подразумеваете под последней половиной «и в фокусе»? Я предполагаю, что вы имеете в виду нечто иное, чем «и приложение видно», потому что это понятно (я разрешаю отправку переднего плана в onResume и отключить его в onPause). И термин «фокус» известен мне только в контексте элементов пользовательского интерфейса, таких как кнопки. – NameZero912