2012-04-03 133 views
1

嗨,我正在開發一個使用NFC功能的Android應用程序。在這裏,我嘗試閱讀NFC Mifare nfc標籤。我使用了可用於android api的NFCDemo,但是我沒有成功通過我的應用程序讀取數據。在那個總是閱讀假標籤並僅給出假結果的演示中。如何在Android中讀取NFC標籤?

我有一個清單文件意圖過濾器混淆。在我的演示應用程序是這樣的

<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活動開始我們點擊假標籤的任何一個假tags.When的任何顯示列表會重定向到與不假數據TagViewer活動真實的標籤數據。 我TagViewer活動有太多的困惑也就是resolveIntent(意向意圖)總是處理

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

,但我不理解什麼錯與此有關。 請指教我是否需要修改api演示以閱讀真實標籤數據。或者建議我有沒有其他方法可以讀取nfc標籤。

我已經嘗試過This Sample 但不能完全幫助我。 請幫幫我。提前致謝。

+0

當你說「不工作」,你想在真實設備上?您確定該設備具有NFC硬件支持嗎? – 2012-04-03 08:47:29

+0

是的,我嘗試過三星Verizon 4G設備。它具有NFC功能。 – 2012-04-03 09:37:33

+0

NFCDemo應用程序真的過時了,我不會用它來構建。但是,讓我們先嚐試找出問題。你在說,當你點擊其中一個假標籤時,它會使用假數據進入TagView活動。這是預料之中的。你實際上在什麼時候掃描了你的標籤?當你這樣做時,我沒有聽到你的問題。 – robertly 2012-04-03 21:41:49

回答

2

最後我想通了解決我的問題。在那裏,我們需要更新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> 

然後我修改了,如果TagViewer類的情況一樣

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

它現在將工作的罰款。主要問題是標籤檢測的priorites那些 優先級1:NDEF_DISCOVERED 優先事項2:TECH_DISCOVERED 優先級3:TAG_DISCOVERED

我給優先級1我的應用程序的意圖過濾器,然後android系統總是在啓動我的活動當標籤檢測。

+0

如果發現的NFC標籤包含NDEF消息,則NDEF_DISCOVERED意圖將僅由Android發送。如果沒有,則僅發送TECH_DISCOVERED意圖。此外,將選擇具有最具體的NDEF_DISCOVERED意圖過濾器的應用,即也指定例如NDEF消息的MIME類型,例如通過向意圖過濾器添加「',將獲得所有純文本NDEF消息。一般來說,不可能爲NFC定義一個意圖過濾器,以確保您的應用始終能夠啓動。 – 2012-04-04 08:18:46

+0

因此,我們需要根據我們的標籤消息格式和消息類型來使用我們的意圖過濾器。對於所有NFC檢測,沒有通用的過濾器,我是對的嗎? – 2012-04-04 09:03:40

+0

沒有意圖過濾器的組合可以捕獲所有NFC意圖。但是,在大多數情況下,應用程序只對非常特定的NFC標籤感興趣。例如具有特定類型的NDEF郵件或包含特定URL(或URL前綴)的標籤。 – 2012-04-04 14:55:48

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>