2014-03-25 52 views
2

感謝所有花時間閱讀此內容的人。對不起,我的英語不好。我知道,我保證。Android NFC:我無法捕獲空標籤意圖

我正在使用NFC的Android應用程序。我有空標籤的問題。當我閱讀空標籤時,我無法捕捉到這個意圖,它總是啓動Android活動以讀取ta標籤,並提及空標籤。對於其他標籤寫東西,我沒有問題。

我搜索,但我沒有找到好的東西。我認爲我的問題在於清單。

所以,我想補充這一點,當然:

<uses-permission android:name="android.permission.NFC" /> 

<uses-feature 
    android:name="android.hardware.nfc" 
    android:required="true" /> 

而且在活動中添加,在第一次

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

      <data android:mimeType="text/plain" /> 
</intent-filter> 

<meta-data 
      android:name="android.nfc.action.TECH_DISCOVERED" 
      android:resource="@xml/nfc" /> 

的XML/nfc.xml資源文件包含以下技術的過濾器:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" > 
    <tech-list> 
     <tech>android.nfc.tech.IsoDep</tech> 
     <tech>android.nfc.tech.NfcA</tech> 
     <tech>android.nfc.tech.NfcB</tech> 
     <tech>android.nfc.tech.NfcF</tech> 
     <tech>android.nfc.tech.NfcV</tech> 
     <tech>android.nfc.tech.Ndef</tech> 
     <tech>android.nfc.tech.NdefFormatable</tech> 
     <tech>android.nfc.tech.MifareClassic</tech> 
     <tech>android.nfc.tech.MifareUltralight</tech> 
    </tech-list> 
</resources> 

我在一些網站上閱讀,它可能增加

很重要
<intent-filter> 
      <action android:name="android.nfc.action.TAG_DISCOVERED" /> 

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

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="*/*" /> 
</intent-filter> 

所以我做到了。

但它沒有奏效。

我知道我可能忘記了一些東西。但是什麼?

+0

首先,''在TECH_DISCOVERED意圖過濾器中沒有意義。其次,你的'nfc.xml'文件包含哪些條目? –

+0

好的,我刪除了mimeType。 我nfc.xml是: '<資源的xmlns:XLIFF = 「甕:綠洲:名稱:TC:XLIFF:文件:1.2」> \t android.nfc.tech.IsoDep android.nfc。 tech.NfcA android.nfc.tech.NfcB android.nfc.tech.NfcF android.nfc.tech.NfcV android.nfc.tech.Ndef android.nfc。 tech.NdefFormatable android.nfc.tech.MifareClassic android.nfc.tech.MifareUltralight \t ' – tatianag

回答

4

好的,我解決了我的問題!這不是清單,而是java代碼。

在第一次閱讀有關nfc的教程時,我使用了代碼的一部分。還有一些代碼我沒有適應你給我的建議。

這是我的代碼

IntentFilter[] filters = new IntentFilter[1]; 
filters[0] = new IntentFilter(); 
filters[0].addAction(NfcAdapter.ACTION_TECH_DISCOVERED); 
try { 
    filters[0].addDataType(MIME_TEXT_PLAIN); 
} catch (MalformedMimeTypeException e) { 
    Log.e("App","Wrong mime") 
} 
adapter.enableForegroundDispatch(activity, pendingIntent, filters, techList); 

錯誤的行動,MIME類型舊零件。許多錯誤...我改變爲

final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0); 
adapter.enableForegroundDispatch(activity, pendingIntent, null, null); 

它完美的工作!我希望它能幫助像你這樣的人幫助你解釋。

再次感謝您的時間!

5

如果您希望爲不包含NDEF消息的標籤啓動(或顯示活動選擇器)的活動(或包含NDEF消息在Android上不可過濾的消息),則android.nfc.action.TECH_DISCOVERED的意圖是要走的路。

android.nfc.action.TAG_DISCOVERED意圖過濾器僅用於回退。因此,只有當沒有其他活動(不僅僅是你的應用)註冊了符合標籤的意圖過濾器時,它纔會觸發。

android.nfc.action.NDEF_DISCOVERED意圖過濾器將僅觸發如果標籤上的第一NDEF記錄相匹配的給定的MIME類型,或者如果該記錄一個給定URI匹配(包括URI映射爲NFC論壇外部類型)。

android.nfc.action.TECH_DISCOVERED意圖過濾器應在形式使用:

<intent-filter> 
    <action android:name="android.nfc.action.TECH_DISCOVERED" /> 
</intent-filter> 
<meta-data android:name="android.nfc.action.TECH_DISCOVERED" 
      android:resource="@xml/nfc_filter" /> 

沒有<data ... /><category ... />標籤應予以補充。

包含標籤列表(xml/filter_nfc.xml)的資源文件必須包含與您的標籤匹配的vaild技術過濾器。每個<tech>...</tech>條目指定您的意圖過濾器將觸發的標籤技術。可以將多個標籤技術條目分組以形成邏輯AND或邏輯OR。一個<tech-list>...</tech-list>組內的所有<tech>條目都與邏輯AND組合。 XML文件中的多個<tech-list>...</tech-list>組與邏輯OR組合。所以,如果你想在任何NFC標籤技術來觸發,您的XML文件應該是這樣的:

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" > 
    <tech-list> 
     <tech>android.nfc.tech.NfcA</tech> 
    </tech-list> 
    <tech-list> 
     <tech>android.nfc.tech.NfcB</tech> 
    </tech-list> 
    <tech-list> 
     <tech>android.nfc.tech.NfcF</tech> 
    </tech-list> 
    <tech-list> 
     <tech>android.nfc.tech.NfcV</tech> 
    </tech-list> 
    <tech-list> 
     <tech>android.nfc.tech.NfcBarcode</tech> 
    </tech-list> 
</tech-list> 

你的XML文件,在另一方面,將需要一個標籤都標記技術同時,這是不可能的,因爲一些技術彼此互斥(例如,標籤不能同時被檢測爲NfcA和NfcB)。

+0

好,感謝所有的精度。我不知道。我更改了我的xml文件以充分利用tech-list。這並沒有解決我的問題。但它解釋了我很多東西:) – tatianag