Как я могу прочитать тег NFC в Android? - PullRequest
1 голос
/ 03 апреля 2012

Привет, я занимаюсь разработкой приложения для Android с использованием функции NFC. Здесь я попытался прочитать NFC Mifare NFC тег. Я использовал NFCDemo, который доступен с Android Api. Но я не смог прочитать данные через мое приложение. В той демонстрации, которая всегда читает поддельные теги и дает только поддельный результат.

У меня путаница с фильтрами намерений файла манифеста. В моем демо-приложении это так

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.nfc"
>
    <uses-permission android:name="android.permission.NFC" />
    <uses-permission android:name="android.permission.CALL_PHONE" />
    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name"
    >
    <activity android:name=".simulator.FakeTagsActivity"
        android:theme="@android:style/Theme.NoTitleBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
        <activity android:name="TagViewer"
            android:theme="@android:style/Theme.NoTitleBar"
        >
            <intent-filter>
                <action android:name="android.nfc.action.TAG_DISCOVERED"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="9" />
    <uses-feature android:name="android.hardware.nfc" android:required="true" />
</manifest>

И приложение всегда запускает с действием FakeTagsActivity любой показ списка поддельных тегов. Когда мы нажимаем на любой из поддельных тегов, оно перенаправляет на действие TagViewer с поддельными данными, а не реальными данными тега. У меня также есть путаница в деятельности TagViewer, также, что resolIntent (намерение намерения) обрабатывает всегда

if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {} 

но я не понимаю, что с этим не так. Пожалуйста, посоветуйте мне, мне нужно изменить демо API для чтения реальных данных тегов. Или посоветуйте мне, есть ли другой способ прочитать тег nfc.

Я уже пробовал Этот образец но не полная помощь для меня. Пожалуйста, помогите мне. Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 04 апреля 2012

Наконец-то я разобрался с решением своего вопроса.Там нам нужно обновить фильтр намерений активности TagViewer, например

 <activity android:name="TagViewer"
            android:theme="@android:style/Theme.NoTitleBar"
        >
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

Затем я изменил условие if класса TagViewer, например

if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {} 

. Теперь оно будет работать нормально.Основная проблема - это приоритеты обнаружения TAG, это приоритет 1: приоритет NDEF_DISCOVERED 2: приоритет TECH_DISCOVERED 3: TAG_DISCOVERED

Я дал приоритет 1 для фильтра намерений моего приложения, тогда система Android всегда запускает мою активность, когда обнаруживается тег.

0 голосов
/ 05 апреля 2012

Проверьте это для NFC, доступно или нет ссылка и попробуйте это для чтения подробностей тега ссылка ..... Добавьте код подробностей тега readind в отдельном активном .. (например: youracctivity) и в декларации указать как

<activity android:name=".youractivity" <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <data android:mimeType="text/plain"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>

...