簡體   English   中英

NFC和Intent過濾器

[英]Nfc and Intent-filter

我寫了這樣的NFC文本標簽

myscheme://company?page=2&poiId=140

然后,我在清單文件中創建了一個這樣的Intent過濾器,以打開我的應用程序(然后使用標記信息來調用WS)

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="text/plain" android:scheme="myscheme" android:host="company"/>
</intent-filter>

如果我從數據標簽中刪除schemehost參數,那么一切正常,但是通過添加過濾,它不再起作用。

為什么呢

有解決方案嗎?

正如corvairjo正確地寫道,“ 您正在將記錄類型MIME類型(此處為文本/純文本)與記錄類型URI混合到一個意圖過濾器中。您應該僅使用一個。

關鍵是NDEF記錄由類型信息和數據有效載荷組成(實際上不僅僅有這兩個字段,但是那兩個字段應該足以理解其背后的概念):

+------+---------+
| TYPE | PAYLOAD |
+------+---------+

如果創建包含URI的文本記錄,則會得到以下內容:

+------------+-------------------------------------+
| text/plain | myscheme://company?page=2&poiId=140 |
+------------+-------------------------------------+

接收設備將根據其類型字段解釋記錄。 因此,它將把有效載荷(“ myscheme:// company?page = 2&poiId = 140”)視為一段人類可讀的文本-而不是 URI!

在Android上,這意味着該記錄被檢測為MIME媒體類型為“ text / plain”的一條人類可讀信息。 因此,您只能使用以下意圖過濾器捕獲它:

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

由於數據有效載荷是人類可讀的文本,因此意圖過濾器無法對文本的任何特定部分進行過濾(Android上的意圖過濾器只能匹配類型信息和URI)。

因此,如果您想要一個與URI匹配的意圖過濾器,則必須將URI包裝到一個記錄類型中,該記錄類型專門將數據有效載荷標識為URI。 通常使用NFC論壇URI記錄類型完成此操作:

+---------------+-------------------------------------+
| urn:nfc:wkt:U | myscheme://company?page=2&poiId=140 |
+---------------+-------------------------------------+

標記編寫器應用程序通常提供將URI / URL寫入標記的選項。 Android NFC API提供了NdefRecord.createUri()方法來創建URI記錄。

然后,您可以使用這樣的意圖過濾器來觸發包含記錄的標簽:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="myscheme" android:host="company" />
</intent-filter>

您正在將記錄類型MIME類型(此處為文本/純文本)與記錄類型URI混合到一個意圖過濾器中。 您只能使用一個。

您可以刪除MIME類型定義,而只需使用URI定義即可:

<data android:scheme="myscheme" android:host="company"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM