通过NFC将Android的URL发送到Windows Phone可以播放Play商店链接
我正在尝试使用NFC将Android应用中的网址发送到WP8手机。
当发送到Android设备时,URL被正确发送。 但是,当向WP8发送消息时,IE会加载到Play商店的链接,而不是我想发送的链接(例如“http://www.stackoverflow.com”)。
Play商店链接是:“https://play.google.com/store/apps/details?id=com.example.conductrnfc&feature=beam”。 其中“com.example.conductrnfc”是项目中的软件包名称。
我用来生成NFC消息的代码如下所示。 我在这里做错了什么,打破了与WP8的兼容性?
NfcAdapter nfc = NfcAdapter.getDefaultAdapter(this);
nfc.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() {
@Override
public NdefMessage createNdefMessage(NfcEvent event)
{
NdefRecord uriRecord = NdefRecord.createUri(urlString);
return new NdefMessage(new NdefRecord[] { uriRecord });
}
},
this);
你可以试试这个:
NfcAdapter nfc = NfcAdapter.getDefaultAdapter(this);
nfc.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() {
@Override
public NdefMessage createNdefMessage(NfcEvent event)
{
byte[] payload = urlString.getBytes();
NdefRecord uriRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
return new NdefMessage(new NdefRecord[] { uriRecord });
}
},
this);
尽管我仍然错过了OP的一些调试结果,但我还是认为我会试一试:
由于命令中的讨论显示,在与WP8手机进行交互时,不会调用createNdefMessage
回调函数,所以会出现这种情况以及如何防止这种情况。 不幸的是,我没有关于活动的实际生命周期的细节,所以我只能猜测可能出现什么问题。
为什么注册createNdefMessage
回调可能不会被调用的一个原因是注册回调的活动不再处于前台。 因此,Android设备和WP8设备之间可能存在差异,导致当前活动暂停。
另一个原因是WP8设备会在Android NFC堆栈有时间调用createNdefMessage
回调方法之前中断通信。 但是,这应该是可检测的,因为在用户能够点击它之前,Beam UI通常会消失。
造成原因1的一个原因可能是WP8设备本身发送了导致Android设备上的意图处理的NDEF消息。 如果是这样的话,解决这个问题的方法可能是注册前台调度系统。 这将阻止定期的意图处理,并直接将所有传入的NDEF消息发送到当前活动:
@Override
public void onResume() {
super.onResume();
NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this);
PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
adapter.enableForegroundDispatch(this, pi, null, null);
}
@Override
public void onNewIntent(Intent intent) {
if (intent != null) {
String action = intent.getAction();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) ||
NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action) ||
NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) {
Log.d("NdefTest", "This problem was actually caused by an incoming NDEF message.");
}
}
}
链接地址: http://www.djcxy.com/p/76675.html
上一篇: Sending URL from Android to Windows Phone via NFC gives Play Store link