Фильтровать URL-адреса тегов nfc с использованием элемента в манифесте?

#android

#Android

Вопрос:

У меня есть nexus-s, и у меня есть тег nfc со следующими данными, записанными в нем:

 http://www.example.com/abc
  

Когда nexus-s обнаруживает тег, я получаю список из двух приложений, которые могут обрабатывать чтение тега:

 tags (included with the nexus-s I think)
MyTagReadingApp (my own demo app)
  

Это манифест для моего демонстрационного приложения:

 <activity 
  android:name=".activities.ActivityReadTag" 
  android:configChanges="keyboardHidden|orientation">
  <intent-filter>
    <action android:name="android.nfc.action.TAG_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>
  

Итак, мое приложение вызывается каждый раз, когда считывается любой тег nfc. Я хочу, чтобы он отображался только в списке приложений, которые могут обрабатывать чтение тега, если в теге есть данные URL, и это часть моего конкретного www.example.com домен. Что-то вроде:

 <activity 
  android:name=".activities.ActivityReadTag" 
  android:configChanges="keyboardHidden|orientation">
  <intent-filter>
    <action android:name="android.nfc.action.TAG_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT" />

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

  </intent-filter>
</activity>
  

Я надеялся, что тег здесь сработает, но, похоже, нет. Этот метод работает для URL-адресов в других местах, например, для гиперссылок. Не уверен, поддерживает ли sdk это еще?

Спасибо

——— Обновить —————

Просматривая DDMS, я вижу следующее при установлении контакта с тегом:

 Starting: Intent { 
  act=android.nfc.action.NDEF_DISCOVERED 
  dat=http://example.com/foo/1234 flg=0x10000000 (has extras) 
} from pid 246

Starting: Intent { 
  flg=0x10000000 cmp=com.android.nfc3/com.android.nfc.TechListChooserActivity 
  (has extras) 
} from pid 246
  

итак, я попытался обновить свой манифест до:

 <activity 
  android:name=".activities.ActivityReadTag" 
  android:configChanges="keyboardHidden|orientation">

  <intent-filter>
    <action
      android:name="android.nfc.action.NDEF_DISCOVERED" />
  

все еще безуспешно. Я использую api 10 (2.3.3).

Ответ №1:

Странно, что это отлично работает на моем nexus S. Может быть, это то, что содержится в вашем намерении

     dat=http://example.com/foo/1234 flg=0x10000000 (has extras) 
  

однако ваше приложение будет реагировать только на WWW.example.com . Я создал тег с example.com и приложение больше не отвечало.

Ответ №2:

Попробуйте добавить действие android:name=»android.intent.action.ПРОСМОТР «
иначе ваше приложение не будет отображаться в appchooser

Остальная часть фильтра выглядит нормально для меня