Получить тег NFC с помощью записи приложения Android NDEF (AAR)
Я работаю над NFC-приложением. Чтобы запустить мое приложение, я использую NDEF-тег с записью AAR NDEF внутри.
Это отлично работает. Но теперь я хочу читать содержимое тега непосредственно с приложением. Как я могу это сделать?
(Это уже работает, когда я удаляю метку с телефона и снова касаюсь ее, но я хочу исключить этот шаг.)
Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="nfctagscanner.mobileapps.lt.nfctagscanner" >
<uses-feature android:name="android.hardware.nfc" android:required="true"/>
<uses-permission android:name="android.permission.NFC" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NFCScanActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="nfctagscanner.mobileapps.lt.nfctagscanner" android:host="ext"
android:pathPrefix="/android.com:pkg" />
</intent-filter>
</activity>
</application>
</manifest>
И я просто хочу получить намерение NDEF_DISCOVERED. Но я всегда получаю action.MAIN/category.LAUNCHER Намерения с моим отладчиком.
Любая помощь будет оценена. Я делал свою работу, основываясь на этом: Android / NFC: Получить тег в onCreate() без нового намерения
2 ответа
Если вы хотите, чтобы ваше приложение запускалось по вашему тегу, и вы хотите получать проанализированное сообщение NDEF, ваш тег должен содержать следующее:
- Запись NDEF, которую вы хотите отфильтровать как первую запись сообщения NDEF (вы можете создавать фильтры намерений только для самой первой записи NDEF в теге NFC). Учитывая ваш собственный ответ, в вашем случае это будет текстовая запись (или запись MIME-типа с MIME-типом text/plain). Тем не менее, вы можете рассмотреть возможность использования записи внешнего типа NFC Forum с вашим пользовательским именем типа вместо этого (см. Здесь, поскольку это позволит вашему приложению лучше отделять теги от тегов, используемых в других приложениях. Текстовая запись должна быть только используется, если содержит нечитаемый для человека текст.
- Если вы хотите убедиться, что только ваше приложение запускается с тегом и что страница Play Store вашего приложения автоматически открывается, если у пользователя нет установленного приложения, вам также следует использовать Android Application Record (AAR). Эта запись должна быть последней записью в сообщении NDEF. (Обратите внимание, что AAR будет учитываться независимо от позиции в сообщении NDEF, но использование его в качестве первой записи вызовет проблему, описанную в сообщении, которое вы связали в своем вопросе.)
Как только у вас есть готовый тег, содержащий правильное сообщение NDEF, вы должны создать соответствующий фильтр намерений для действия, которое должно получить событие обнаружения тега, и сообщение NDEF, которое его вызвало:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
Или, если вы использовали свой собственный внешний тип форума NFC:
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="vnd.android.nfc"
android:host="ext"
android:pathPrefix="/yourdomain.com:yourtypename"/>
</intent-filter>
Если ваше приложение не имеет NDEF_DISCOVERED
Фильтр намерений, который соответствует первой записи сообщения NDEF в вашем теге, и ваш тег содержит запись приложения Android, первое действие, объявленное в вашем манифесте, для которого установлен фильтр намерений для android.intent.action.MAIN
и с android.intent.category.LAUNCHER
будет начато. Поскольку эта деятельность, следовательно, не объявляет о намерении NFC, она будет переданаandroid.intent.action.MAIN
(который не содержит дескриптор сообщения / тега NDEF).
Я не знаю, если это правильный ответ, но я нашел решение:
<activity
android:name=".NFCScanActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity>
</application>
</manifest>