Android NFC在启动应用程序时传递单个参数

Android NFC在启动应用程序时传递单个参数,android,tags,nfc,ndef,android-applicationrecord,Android,Tags,Nfc,Ndef,Android Applicationrecord,我想使用NFC标签启动一个应用程序。我使用android应用程序记录(AAR)工作,如中所述,或者使用NDEF\u DISCOVERED/TECH\u DISCOVEREDintent过滤器。但是,在通过NFC事件启动活动时,如何将数据从NFC标记(例如一些文本)传递到我的活动 我已经读过了,但据我所知,它似乎想要实现一种读取标签的机制,当我真的不想在标签打开应用程序后重新读取标签时,我只想同时传递数据 此外,这些机制似乎允许应用程序在标签启动后读取标签。换句话说,我担心如果有人在应用程序已经打

我想使用NFC标签启动一个应用程序。我使用android应用程序记录(AAR)工作,如中所述,或者使用
NDEF\u DISCOVERED
/
TECH\u DISCOVERED
intent过滤器。但是,在通过NFC事件启动活动时,如何将数据从NFC标记(例如一些文本)传递到我的活动

我已经读过了,但据我所知,它似乎想要实现一种读取标签的机制,当我真的不想在标签打开应用程序后重新读取标签时,我只想同时传递数据

此外,这些机制似乎允许应用程序在标签启动后读取标签。换句话说,我担心如果有人在应用程序已经打开的时候点击标签,标签会被再次读取(这是我所做的而不是想要的)


第二,我如何创建这样的NDEF消息?

Android将自动读取NFC标签的NDEF消息并对其进行处理,以便

  • 根据第一个NDEF记录开始注册活动,以及
  • 根据NDEF消息中的任意位置的Android应用程序记录(AAR)启动应用程序
为了启动您的活动并让Android传递预读的NDEF消息,您可以使用
NDEF\u DISCOVERED
intent过滤器:

<intent-filter>
    <action android:name="android.nfc.action.NDEF_DISCOVERED" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="vnd.android.nfc"
        android:host="ext"
        android:pathPrefix="/example.com:mycustomtype"/>
</intent-filter>
最后,要为NFC标记创建NDEF消息,您可以执行以下操作:

byte[] payload = ...  // generate your data payload
NdefMessage msg = new NdefMessage(
    NdefRecord.createExternal("example.com", "mycustomtype", payload)
)
如果您想确保只有您的应用程序通过此标签启动(或者如果未安装,则为您的应用程序打开Play Store),您还可以添加AAR:

NdefMessage msg = new NdefMessage(
    NdefRecord.createExternal("example.com", "mycustomtype", payload),
    NdefRecord.createApplicationRecord("com.example.your.app.package")
)

你的应用程序的数据应该来自哪里?从NFC标签或其他地方?你读过吗?corvairjo-数据将来自NFC标签。因此,我希望NFC标签启动应用程序(这相当简单),然后传入一个字符串(这让我感到困惑)。@MichaelRoland-是的,确实读过。我的问题(可能是我的误解)是,它似乎想要实现一种读取标签的机制,当我真的不想在标签打开应用程序后重新读取标签时——我只想同时传递数据。换言之,我担心如果有人在应用程序已经打开时点击了标签,标签会再次被触发(我不希望如此)。@StephenMcCormick因此,对于第一部分(从标签获取数据参数),您需要执行中所述的操作。这将处理Android读取的NDEF消息,并在intent中传递给您的应用程序。完美!可能在下周实施,并将根据我的发现进行更新。谢谢你的帮助@Michael Roland“.onResume()将在您的活动成为前台活动时运行…”我们如何处理它?我花了很多时间来弄清楚它?有什么想法吗?
byte[] payload = ...  // generate your data payload
NdefMessage msg = new NdefMessage(
    NdefRecord.createExternal("example.com", "mycustomtype", payload)
)
NdefMessage msg = new NdefMessage(
    NdefRecord.createExternal("example.com", "mycustomtype", payload),
    NdefRecord.createApplicationRecord("com.example.your.app.package")
)