2016-05-12 77 views
2

我在兩個Android設備上有兩個應用程序,類似於NFC樣本中的CardEmulation和CardReader。NFC卡模擬與封閉的閱讀器應用程序

我想將運行在一個Android設備上的主機卡模擬應用程序的數據發送到運行在第二個Android設備上的讀卡器應用程序。這兩個應用程序在前臺打開時都可以使用。

但是,如果我關閉閱讀器應用程序,我不能再向它發送數據。相反,當兩部手機結合在一起時,它們會激活波束傳輸。不過,我希望在兩部手機放在一起時,手機會自動啓動閱讀器應用程序。

所以問題是:

  1. 我可以從HCE應用程序發送數據,以便讀取器接收時,該設備被放置接近海誓山盟一個TECH_DISCOVERED意圖是什麼? (我們不希望額外的接受點擊波束模式。)

  2. 如果這是不可能的,HostApduService可以發送數據,以便讀者收到一個NDEF_DISCOVERED意圖?

+0

雙方(卡和讀卡器)都是Android設備,對不對? –

+0

@MichaelRoland是的。 –

回答

4

不幸的是,那是不可能的。由於Android NFC堆棧針對其他NFC設備(點對點模式和NFC標籤)實施輪詢的方式,因此無法通過基於主機的卡仿真(HCE)應用程序在一個Android設備上啓動閱讀器應用程序另一個Android設備。

Android NFC堆棧默認情況下針對NFC標籤和NFC點對點設備進行輪詢。因此,當兩個Android設備組合在一起時,它們將通過NFC讀寫器模式+卡模擬模式自動通過NFC點對點模式和而不是進行通信。

因此,「閱讀器」設備無法檢測在第二個設備上運行的HostApduService。因此,Android設備無法模擬將在第二個Android設備上觸發應用程序的NFC標籤(包含NDEF消息),該應用程序會過濾意圖,甚至是TECH_DISCOVEREDTAG_DISCOVERED意圖。

第二個Android設備上的一個Android設備(即處於讀寫器模式)和HCE應用程序(HostApduService)之間通信的唯一方法是使用reader mode API)。這將禁用對等輪詢並因此允許閱讀器Android設備發現其他設備的卡模擬模式。但是,爲了使用此API,您的應用程序必須已具有在閱讀器設備上運行的前臺活動。

請注意,禁用Android Beam(通過設置應用程序)不會禁用點對點模式。所以這樣做不會改變任何事情。