Android应用程序是否可以将先前存储的RFID卡ID发送到NFC读卡器?目的是使用Android设备来访问房间而不是物理RFID卡.在阅读了很多关于NFC/RFID和卡仿真的其他主题之后,我得出结论,目前在Android中无法使用它,但如果适用于这种特殊情况,我仍然感到困惑.应用程序不能简单地在NDEF消息或APDU命令中发送卡ID,或者我只是完全在做梦?
从Android 5.0.0开始,您可以长时间点击WiFi连接并将该连接写入标签("写入NFC标签").您可以在此处找到该操作的源:WriteWifiConfigToNfcDialog.java.采用WiFi连接并创建NDEF有效负载的相关线路似乎在这里:
String wpsNfcConfigurationToken = mWifiManager.getWpsNfcConfigurationToken(mAccessPoint.networkId);
mWifiManager
是一个实例WifiManager
,但getWpsNfcConfigurationToken
不是API的一部分.通过跟踪此方法,我们可以在此处找到它的提交:添加对NFC WSC令牌创建的调用,遗憾的是没有帮助.这是我的调查已经用完的地方.编辑:我发现了以下调用堆栈:
WifiServiceImpl.java
电话 mWifiStateMachine.syncGetWpsNfcConfigurationToken(netId);
WifiStateMachine.java
电话 mWifiNative.getNfcWpsConfigurationToken(netId);
WifiNative.java
终于有了方法
public String getNfcWpsConfigurationToken(int netId) {
return doStringCommand("WPS_NFC_CONFIG_TOKEN WPS " + netId);
}
然后调用
String result = doStringCommandNative(mInterfacePrefix + command);
在哪里doStringCommandNative
进行系统调用(无法在任何地方找到此代码).
现在调查结束的地方.
希望有人能介入,并告诉我,创建一个方法NdefRecord
是类型的application/vnd.wfa.wsc
给定的SSID,密码,加密/身份验证类型.
我当然检查了application/vnd.wfa.wsc
由Android创建的实际记录的字节,但手动重新创建这个字节的过程似乎可能非常不可靠,而且非常繁琐.
没有任何运气使用谷歌,所以我想我会问.
有没有人有经验/知道如何从Windows Phone 8设备向Android设备发送简单的字符串即"hello"?
到目前为止我们已经能够做到android - > android和android - > windows phone 8但是我们还没有找到如何做到从windows phone 8到android.
有没有人在网上看过指南或知道怎么做这样的事情?
我想的第一步是找出如何使Windows Phone 8上的应用程序实现其附近的Android NFC设备..然后它将弄清楚如何使Android手机上的应用程序接收消息.
提前致谢!
*答案*
好吧所以这里有一些答案/提示
我最终发送NFC消息作为外部类型,因为发送应用程序/ my.mimetype不断给我一个"抱歉你的手机无法记录这种类型的文件"在Windows手机上,即使消息正在通过.
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
NdefMessage ndefMessage = new NdefMessage((
new NdefRecord[] {createMimeRecord("packageName:externalType",docId.getBytes())}));
return ndefMessage;
}
public NdefRecord createMimeRecord(String mimeType, byte[] payload) {
byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));
NdefRecord mimeRecord = new NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, mimeBytes, new byte[0], payload);
return mimeRecord;
}
Run Code Online (Sandbox Code Playgroud)
在android中你要做的就是按照SDK示例中的android示例(android-16/17-AndroidBeamDemo)进行解释,这里的解释非常彻底 - http://www.tappednfc.com/wp-content/uploads/TAPPED -NFCDeveloperGuide-Part1.pdf
但不是使用应用程序mimetype使用上面的外部类型,并在您的清单中放置以下而不是在intent过滤器中的mimetype:
<data
android:host="ext"
android:pathPrefix="/cco.drugformulary:externalType"
android:scheme="vnd.android.nfc" />
Run Code Online (Sandbox Code Playgroud)
关于从Windows手机阅读和发送消息,您可以使用接受的答案人员所做的事情,它应该可以工作但是对于类型放置cco.drugformulary:externalType从上面(当然你的项目名称).
如果您遇到任何问题,请随时问我
我试图做我猜想会很简单的事情,但事实证明并非如此.我有一个ACR122 NFC阅读器和一堆Mifare Classic和Mifare Ultralight标签,我想要做的就是从Java应用程序读取和写入每个卡的mime类型和短文本字符串.这是我到目前为止所做的工作:
这是我的代码:
主要:
public static void main(String[] args){
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals;
try{
TerminalHandler handler = new TerminalHandler();
terminals = factory.terminals().list();
CardTerminal cardTerminal = terminals.get(0);
AcsTerminal terminal = new AcsTerminal();
terminal.setCardTerminal(cardTerminal);
handler.addTerminal(terminal);
NfcAdapter adapter = new NfcAdapter(handler.getAvailableTerminal(), TerminalMode.INITIATOR);
adapter.registerTagListener(new CustomNDEFListener());
adapter.startListening();
System.in.read();
adapter.stopListening();
}
catch(IOException e){
}
catch(CardException e){
System.out.println("CardException: " + e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
CustomNDEFListener:
public class CustomNDEFListener extends AbstractCardTool
{
@Override
public void doWithReaderWriter(MfClassicReaderWriter readerWriter)
throws IOException{
NdefMessageDecoder …
Run Code Online (Sandbox Code Playgroud) 我有一个LG D320n Android手机,elechouse的PN532 nfc模块和Stollmann的NFCPlayer,我可以正确阅读NFC标签.
我从这里测试了一个样本:https://github.com/grundid/host-card-emulation-sample
它工作正常,当我读取一个Android设备作为标签与另一个Android设备作为阅读器.但我无法通过NFCPlayer将Android设备作为PN532阅读器的标签阅读.我希望读者从Android设备读取NDEF消息作为标签,但NFCPlayer甚至不能识别Android设备.我想我必须在Android方面做一些修改,但我无法弄明白该怎么做.我想我对NFC通信和HCE的工作方式知之甚少,尽管我读过这篇文章:https: //developer.android.com/guide/topics/connectivity/nfc/hce.html
我真的很感激任何可以帮助我理解我在这里缺少什么的指南.
我刚刚开始使用Android NFC编码,我已成功读取和编写NIFF数据到mifare经典标签.问题是当app从ndef记录中读取有效负载时,它总是在文本的开头包含字符'*en'.我认为这是语言特征,但如何获得没有该字符的真实短信?
这是截图从标签读取的应用程序,实际文本是"Hello World"
这是要阅读的代码
@Override
public void onNewIntent(Intent intent) {
Log.i("Foreground dispatch", "Discovered tag with intent: " + intent);
// mText.setText("Discovered tag NDEF " + ++mCount + " with intent: " + intent);
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
NdefMessage[] msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
NdefMessage msg = msgs[0];
try {
mText.setText(new String(msg.getRecords()[0].getPayload(), "UTF-8"));
} catch (Exception e) { …
Run Code Online (Sandbox Code Playgroud) 根据此答案,并通过测试验证,当您使用Android Beam推送包含AAR记录的NFC消息时,接收设备将启动AAR中指定的应用程序的MAIN
/ LAUNCHER
activity.
那MAIN
/ LAUNCHER
Intent
不包含NfcAdapter.EXTRA_NDEF_MESSAGES
额外的.因此,如果您使用AAR,我们遇到的所有麻烦的数据都会丢失.
有没有办法在这种情况下获取触发应用程序的NFC消息?
如果答案是"否",那么AAR的用例是什么?当接收设备上不存在所需的应用程序(启动Play商店)时,我可以看到它可能会有所帮助,但是一旦安装了应用程序,AAR就会阻止任何将数据从一个设备传送到另一个设备的尝试,这是有点像NFC的背后.
谢谢!
我是NFC新技术的新手,并试图了解它.我有一个ACR122,我正在尝试写一个NDEF记录.
我正在使用VS2012,到目前为止已安装了pcsc-sharp库以及我从某处获得的NDEFLibrary.
我可以连接到ACR122,我可以创建一个NDEF消息然后呢?我如何实际编写我为标签创建的NDEF消息?
我在pcsc-sharp库中看不到任何函数来传递消息来实际写入标记?
有人能指出我正确的方向吗?我承认我是NFC的新手,我还有很多需要学习的东西,但我正在阅读很多东西并慢慢地到达那里.
iOS 11 Apple现在支持为iPhone 7/7 Plus及更高版本阅读NFC标签的消息.
我找到了一些演示,但不知道是否有办法阅读受保护的NFC标签.例如,旅行证件中嵌入了NFC标签,可以防止不安全的阅读.我在Apple文档中搜索了NFC NDEF协议,但没有任何功能需要NFC标签的质询/握手.有没有办法与这些类型的NFC标签进行交互?
我正在尝试将我的应用程序上传到使用CoreNFC (NDEF) 的 TestFlight。
不幸的是,我在(SDK 版本 13 和 13.1)中的 Testflight Validate 部分收到了错误消息。
我已经试过了:Xcode 11 beta can't upload app to TestFlight
但它会失去 NDEF 功能:https : //stackoverflow.com/a/58128365/5588637
错误消息:核心 nfc 框架的权利无效 sdk 版本 13.0 和 min OS 版本 13.0 与权利 'com. 苹果开发者NFC。Readersession 格式,因为 NDEF 被禁止