我如何在Android中读取NFC标签?

时间:2012-04-03 06:15:31

标签: android nfc

您好我正在开发使用NFC功能的Android应用程序。在这里,我试图阅读NFC Mifare nfc标签。我使用了android api提供的NFCDemo。但是我没有通过我的应用程序读取数据获得成功。在该演示中,它始终只读取假标签并仅提供假结果。

我对清单文件意图过滤器感到困惑。在我的演示应用程序中就像这样

<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活动中也有困惑,也就是resolveIntent(Intent intent)总是处理

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

但我不明白这是错误的。 请建议我,我需要修改api演示来读取真实的标签数据。或者建议我有其他方法来阅读nfc标签。

我已经尝试This Sample 但对我来说没有帮助。 请帮我。提前谢谢。

2 个答案:

答案 0 :(得分:2)

最后,我找到了问题的解决方案。我们需要更新TagViewer活动的intent过滤器,如

 <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>

然后我修改了像

这样的TagViewer类的if条件
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {} 

现在工作正常。主要问题是TAG检测的优先级 优先级1:NDEF_DISCOVERED 优先级2:TECH_DISCOVERED 优先级3:TAG_DISCOVERED

我为我的应用程序意图过滤器赋予优先级1,然后android系统在检测到标记时始终启动我的活动。

答案 1 :(得分:0)

请检查此处是否有NFC可用a link并尝试阅读标签详细信息a link .......在单独的活动中添加readind标签详细信息代码...(例如:youractivity)并在清单给出

<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>