NFC中的AAR记录:负载在哪里?

8
这个答案所述,并经过测试验证,当使用Android Beam传输包含AAR记录的NFC消息时,接收设备将启动AAR中指定应用程序的MAIN/LAUNCHER活动。
由于那个 MAIN/LAUNCHER Intent 不包含 NfcAdapter.EXTRA_NDEF_MESSAGES 额外数据。因此,如果使用AAR,则我们费尽心思要传输的数据看起来已经丢失了。
在这种情况下,是否有一些方法可以获取触发应用程序启动的NFC消息呢?
如果答案是“否”,那么AAR的用例是什么?我可以看到,在接收设备上所需的应用程序不存在时可能会很有帮助(弹出Play商店),但是一旦安装了该应用程序,AAR就阻挠了从一个设备向另一个设备传送数据的任何尝试,而这正是NFC背后的意义。
谢谢!
2个回答

7

冒着自己回答问题的风险,一个让它工作的方法(显然)是:

  • Have the Beam sender use an NFC message with two NFC records, the first containing something for a unique MIME type, the second being the AAR

  • Have the Beam recipient have an <intent-filter> on the activity that responds to the first NFC record, such as via:

        <intent-filter>
            <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
    
            <category android:name="android.intent.category.DEFAULT"/>
    
            <data android:mimeType="application/vnd.commonsware.webbeam"/>
        </intent-filter>
    
如果应用程序已经存在,则将使用NDEF_DISCOVERED Intent,接收方可以接收NFC消息并从初始记录中提取数据。如果应用程序不存在,则AAR将启动,打开Play商店(无论您的应用程序是否通过Play商店分发)。
这是在开发者网站上Android Beam示例中显示的示例

仔细阅读文档:http://developer.android.com/guide/topics/connectivity/nfc/nfc.html#aar 建议无论您的AAR在哪里(第一或第二个),只要意图过滤器中也有匹配的MIME类型,整个意图都将传递给您的应用程序。因此,我想如果AAR是第一条记录,您的答案也可以起作用。 - Taiko
如果接收设备没有安装应用程序,有没有办法获取有效载荷?我希望在他们安装后,他们仍然可以获得意图。 - hooby3dfx
@hooby3dfx:抱歉,我从来没有尝试过让AAR记录工作,所以我不知道。 - CommonsWare

0
从文档上看,似乎用例是确保您的应用程序从NFC事件启动。第二个用例基本上提供了一种让手机知道需要读取标签的应用程序的方法。
几个问题: 如果使用两个记录:第一个正常,第二个AAR,活动如何启动?我希望您通过标签调度意图启动。 AAR意图包含任何获取标签的内容吗?我在想您可以手动...

使用案例是确保您的应用程序从NFC事件启动,这样他们就不必点击启动器图标了?大惊小怪。使用案例基本上提供了一种让手机知道需要读取标签的应用程序的方法,但如果我们无法从标签中获取数据,则它并没有以任何有意义的方式“读取标签”。如果您使用两个记录:第一个正常,第二个AAR,活动如何启动?这正是我正在尝试的场景,并且即使活动已在前台运行,也会调用MAIN/LAUNCHER。 - CommonsWare
第一个用例肯定不是很强大。 我说的是第二个用例,即目标手机没有相关应用程序。 等我下周有另一台4.0设备时,我会尝试再看一下。 - MrChaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接