我知道目前IOS 11中没有API可以将数据写入NFC标签,但是可以从NFC标签读取数据并希望将文本从Android设备传递到iPhone。 我认为可以编写NdefMessage并将其在IOS上接收,但对我而言不起作用。当我在IOS上开始使用NfcActions应用程序进行NFC扫描时,没有收到Intent。
我主要活动的源代码:
class MainActivity : AppCompatActivity() {
var nfc: NfcAdapter? = null
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
hintLabel.text = "Initializing..."
nfc = NfcAdapter.getDefaultAdapter(this)
if (nfc == null) hintLabel.text = "NFC is not available on this device"
else hintLabel.text = "NFC initialized"
}
override fun onResume() {
super.onResume()
nfc?.enableNFCInForeground(this, javaClass)
}
override fun onPause() {
super.onPause()
nfc?.disableForegroundDispatch(this)
}
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
val pathPrefix = "/testuser:nfctest"
val isSuccess = createNFCMessage(pathPrefix, "Hello World", intent)
if(isSuccess)
hintLabel.text = "Successfully wrote data"
else
hintLabel.text = "Couldnt write any data"
}
fun createNFCMessage(pathPrefix: String, payload: String, intent: Intent?) : Boolean {
val nfcRecord = NdefRecord(NdefRecord.TNF_EXTERNAL_TYPE, pathPrefix.toByteArray(), ByteArray(0), payload.toByteArray())
val nfcMessage = NdefMessage(arrayOf(nfcRecord))
intent?.let {
val tag = it.getParcelableExtra<Tag>(NfcAdapter.EXTRA_TAG)
return writeMessageToTag(nfcMessage, tag)
}
return false
}
fun <T>NfcAdapter.enableNFCInForeground(activity: Activity, classType: Class<T>) {
val pendingIntent = PendingIntent.getActivity(activity, 0,
Intent(activity,classType).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0)
val filters = arrayOf(IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED))
val techList = arrayOf(arrayOf(Ndef::class.java.name), arrayOf(NdefFormatable::class.java.name))
this.enableForegroundDispatch(activity, pendingIntent, filters, techList)
}
private fun writeMessageToTag(nfcMessage: NdefMessage, tag: Tag?): Boolean {
// This functions writes given NdefMessage to the tag, if it's possible
// and returns whether it was successful or not
}
我还向主清单添加了以下权限和意图过滤器
<uses-permission android:name="android.permission.NFC" />
<uses-feature
android:name="android.hardware.nfc"
android:required="false" />
<application ...>
<activity ...>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:host="ext"
android:pathPrefix="/testuser:nfctest"
android:scheme="vnd.android.nfc"
android:mimeType="text/plain"/>
</intent-filter>
</activity>
</application>
我在做什么错,以及如何使用NFC将数据从Android设备正确传递到iPhone?
答案 0 :(得分:2)
显然,将NDEF消息从一部手机发送到另一部手机的常用对等2对等方式仅在2个android设备之间有效。 要将消息从Android发送到iOS,您需要使用主机卡仿真。 基本上,Android手机需要模拟Tag 4类型(基于NDEF论坛规范),以便iPhone读取内容。 希望能让您走上正确的路...
答案 1 :(得分:1)
对于那些坚持此问题的人,我已经阅读了@Michael Roland提出的NFCForum-TS-Type-4-Tag。整个想法是正确的。您所需要做的就是模拟SEND和RECEIVED过程,以将字节数组转换为NDEF消息。我创建了两个存储库,一个存储库总结了有关将字符串转换为NDEF message的整个程序包,另一个存储库是一个iOS Reader NDEF TAG来验证Android HCE是否正确。
祝你好运!
另请参见response by Michael Roland至NDEF Message with HCE Android。