有没有人尝试过 Android 默认行为如何,当在 NFC 标签上保存 2 条 NDEF 记录时,一个指向具有应用程序 .apk 的 URL,而第二个具有应用程序专有数据?
用例如下:当用户尚未安装应用程序时,设备启动 Google Play 或网络浏览器,用户可以下载应用程序。一旦用户安装了应用程序,它就会处理标签内容。两者都单独工作,但我没有在一个 NDEF 中尝试过 2 条 NDEF 消息或 2 条记录。有 2 条 NDEF 记录的经验吗?我可以自己尝试,但我想节省时间。
因此,我尝试在Visual Studio 2012中为Windows Phone 8应用程序添加NDEF库以用于邻近应用程序.在Package Manager我检查Allow NuGet to download missing packages during build和Solution Explorer我选择Enable NuGet Package Restore.
到目前为止这么好,但是当我尝试安装软件包时,我收到以下错误:
无法安装包' NdefLibrary 0.9.0.1 '.您正在尝试将此软件包安装到以" WindowsPhone,Version = v8.0 "为目标的项目中,但该软件包不包含与该框架兼容的任何程序集引用.有关更多信息,请与软件包作者联系.

NFC和NDEF之间究竟有什么关系?NFC设备是否总是必须有NDEF格式的数据?或者是否有可能拥有NFC而不是NDEF(虽然我认为反之亦然是不可能的?)?空的NFC卡会是什么样的?它仍然有NDEF头信息但没有有效载荷吗?或者标签是否可以完全为空,也就是说,没有任何标题信息?在这种情况下,这仍然可以通过Android手机或读卡器检测到吗?究竟什么使标签被读者检测到?
我想使用NFC标签启动应用程序.我使用Android应用程序记录(AAR)使用Android应用程序记录(AAR),使用NFC标签启动Android应用程序,使用额外数据或使用NDEF_DISCOVERED/ TECH_DISCOVEREDintent过滤器.但是,在通过NFC事件启动时,如何将NFC标签(例如某些文本)中的数据传递给我的活动?
我已经阅读了NFC基础知识,但据我所知,它似乎想要实现一种读取标签的机制,当我真的不想在标签打开应用程序后重新读取标签,但是相反,我只想要同时传入的数据.
此外,这些机制似乎允许应用程序在标记启动后读取标记.换句话说,我担心如果有人在应用程序打开后再点击标签,那么标签将再次被读取(这是我不想要的).
其次,我如何创建这样的NDEF消息?
NFC标签和NFC卡是同一个东西吗?Android 文档提到了两者。读取简单标签时显示“NFC 标签”,但随后在HCE 文档中显示“NFC 卡” 。我可以假设它们是相同的吗?
我在这里找到了一些最近关于使用 Android 读取 NFC 标签的帖子。我得到的结论是,执行 NFC 读取操作会触发一个单独的意图。
我想要实现的是,只有我当前的活动是以文本/纯格式从 NFC 标签读取 NDEF 消息。
所以第一个问题:是否有必要在我的清单中列出意图过滤器?
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
Run Code Online (Sandbox Code Playgroud)
我认为这是没有必要的,因为我不想通过NFC 标签事件启动我的应用程序,对吗?
第二个问题:如何保持 NFC 读取逻辑/功能与我的应用程序/活动相关?
后
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="true" />
Run Code Online (Sandbox Code Playgroud)
我转到当前的 Activity 并在 Create 时初始化 NFC 适配器:
mNfcAdapter = NfcAdapter.getDefaultAdapter(this)
Run Code Online (Sandbox Code Playgroud)
读取 nfc 标签 NDEF 消息的下一步是什么?在调度前台发现与意图相关的内容:
@Override
protected void onNewIntent(Intent intent) {
handleIntent(intent);
}
Run Code Online (Sandbox Code Playgroud)
如果有人有一个想法/示例(Kotlin)如何从活动中读取 NFC 标签而不需要启动/发送 NFC 操作之类的东西,那就太好了。
例如,在 iOS 中,当 VC 需要时,有一个简单的 NFC 会话。
我的应用程序使用前台分派系统允许用户点击其NFC标签,以便对该标签执行读后写操作。
如果用户正确敲击标签(即,将其在手机上的正确位置敲击并保持足够长的连接时间),则效果很好,但是如果用户过早地物理移除标签,则会ndef.writeNdefMessage(...)抛出IOException。
这意味着写操作失败,这很公平。但是真正的问题是,相同的失败操作也会从标记中删除整个ndef格式/消息!
我的代码是围绕Advanced NFC的代码片段构建的。Android开发人员页面(不幸的是,指向ForegroundDispatch示例的链接似乎已断开,并且没有此类示例项目可导入Android Studio)。
步骤1.这是用户首次点击其NFC标签但将其移得过早时的logcat / stacktrace输出:
03-28 20:15:18.589 21278-21278/com.example.exampleapp E/NfcTestActivity: Tag error
java.io.IOException
at android.nfc.tech.Ndef.writeNdefMessage(Ndef.java:320)
at com.example.exampleapp.NfcTestActivity.onNewIntent(NfcTestActivity.java:170)
at android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1224)
at android.app.ActivityThread.deliverNewIntents(ActivityThread.java:2946)
at android.app.ActivityThread.performNewIntents(ActivityThread.java:2959)
at android.app.ActivityThread.handleNewIntent(ActivityThread.java:2968)
at android.app.ActivityThread.access$1700(ActivityThread.java:181)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1554)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6145)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
03-28 20:15:18.599 1481-17792/? E/SecNfcJni: nfaConnectionCallback: NFA_SELECT_RESULT_EVT error: status = 3
03-28 20:15:18.599 1481-1502/? E/SecNfcJni: reSelect: tag is …Run Code Online (Sandbox Code Playgroud) 我正在使用Mifare Ultralight C标签并向它们写入 NDEF 格式的数据。我正在使用NDEF-NFC 库为我的 NDEF 消息创建原始字节。我的 NDEF 消息是
var spRecord = new NdefTextRecord {
Text = "1",
LanguageCode = "en"
};
var msg = new NdefMessage { spRecord };
Run Code Online (Sandbox Code Playgroud)
我得到的输出是D1 01 04 54 02 65 6E 31(十六进制)。如果我按原样将此字节数组写入标签:
按照使用 ACR122U 作为 Reader/Writer 在 Windows 窗体应用程序 C# 中将 Ndef 写入 NFC 标签中的建议,我修改了我的字节数组以写入而不是库生成的原始字节数组。03 08 D1 01 04 54 …
我已经通过低级通信方法实现了与 NTAG216 交互的代码(遵循NTAG212 Mifare Ultralight with Authentication和 NTAG216 的数据表)。
writePage()method写入标签,也可以使用readPage(). 但是,在写入页面时,我将 anNdefMessage转换为可以读取和写入的字节数组。但是,在其他应用程序中未检测到此 NDEF 消息。我需要做什么才能检测到我从其他应用程序编写的 NDEF 消息?
我有两个 NFC 标签,其扇区具有不同的密钥:
标签 1:此标签包含 NDEF 消息。
A0:A1:A2:A3:A4:A5用于密钥 AD3:F7:D3:F7:D3:F7用于钥匙 A标签 2:此标签上没有 NDEF 数据
FF:FF:FF:FF:FF:FF用于钥匙 A 和 BMIFARE Classic 标签是否有符合 NDEF/非 NDEF 的标准密钥?