嗨我有两个三星galaxy S4。我开发了一个基于NFC的Android应用程序,当在运行应用程序(源手机)的手机上触摸按钮时,该应用程序将简单文本发送到联系人手机(目标手机)。我的问题是,当我在源手机上运行我的应用程序并将目标手机靠近源手机时,三星的默认应用程序启动(此应用程序显示源手机当前活动的屏幕截图并要求您触摸屏幕,然后在目标手机中启动相同的活动)。 我想禁用它,以便我开发的应用程序没有任何问题。 我如何实现这一目标?
答案 0 :(得分:0)
尝试实例化NfcAdapter
并调用disableForegroundDispatch
或disableReaderMode
。
答案 1 :(得分:0)
如果你想(或者 到 1 )使用Android Beam,有没有方式来避免Beam UI(那就是使用您活动的小屏幕截图的活动。)
为了正确使用Beam(使用Beam UI)并发送文本 2 ,请执行以下操作:
onNewIntent()
方法中接收NDEF消息(或者更确切地说是NFC发现事件。请参阅this answer了解如何启用前台调度。使用类似的内容(例如,在接收活动的onCreate()
方法中)为目标设备上的活动禁用投影:
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter != null) {
nfcAdapter.setNdefPushMessage(null, this);
}
将源设备发送的NDEF消息更改为您实际要发送的NDEF消息(例如包含您的文本记录的NDEF消息)。如果您不这样做,Android将(默认情况下)发送一个Android应用程序记录,该记录将在目标设备上启动您的默认活动。您可以像这样设置NDEF消息(例如在发送活动的onCreate()
方法中):
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter != null) {
byte[] text = "Hello World!".getBytes("UTF-8");
byte[] recordPayload = new byte[3 + text.length];
recordPayload[0] = (byte)0x02; //UTF-8, 2-byte language code
recordPayload[1] = (byte)0x65; //'e'
recordPayload[2] = (byte)0x6E; //'n'
System.arraycopy(text, 0, recordPayload, 3, text.length);
NdefMessage ndefMsg = new NdefMessage(
new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, null, recordPayload)
);
nfcAdapter.setNdefPushMessage(ndefMsg, this);
}
如果两台设备都使用Android 4.4+,而不是使用Beam,则可以在一台设备上使用Host-based Card Emulation(HCE),在另一台设备上使用NFC reader mode。当您组合这些功能时(即,您在一台设备上具有HCE主机卡仿真服务并将第二台设备置于读卡器模式),两台设备都可以使用ISO 7816-4 APDU进行相互通信。这样做的好处是你可以完全跳过恼人的Beam UI。
1)如果您使用的是Android版本,那就是这种情况。 4.4
2)我假设一个NDEF文本记录,对吗?