通过NFC从安卓发送URL到Windows Phone会给出Play Store链接。

8
我正在尝试使用NFC从Android应用程序向WP8手机发送URL。当传输到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);

你是否也在消息中附加了AAR?鉴于您的代码,似乎并不是这样,但我知道这是从NFC消息导致应用程序进入Play商店的原因之一。 - CommonsWare
我没有附加AAR,URL是消息中唯一的记录。 - J Yang
1
你能展示一下你发送给WP8的链接以及在WP8上具体显示的内容吗? - 72DFBF5B A0DF5BE9
@M.C. - 实际代码是NdefRecord uriRecord = NdefRecord.createUri(webView.getUrl());,其中webView已经在activity的onCreate中指向了一个网站(而不是Play商店)。WP8看到的是问题中提到的URL。 - Robert Levy
@RobertLevy,所以你发送到WP8的任何URL都会将URL发送到你的应用商店中的应用程序? - 72DFBF5B A0DF5BE9
显示剩余14条评论
2个回答

3

你能试试这个吗:

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);

请确保将 NdefRecord.TNF_ABSOLUTE_URI 替换为 NdefRecord.TNF_WELL_KNOWN - Michael Roland
@MichaelRoland,没错!谢谢你,我把RTD_URI添加到了第二个参数中,只是针对TNF_WELL_KNOWN,但我漏掉了。好发现! - 72DFBF5B A0DF5BE9
刚试了一下,不幸的是它似乎仍然存在同样的问题。WP8打开一个到Play商店的链接而不是字符串中的链接。 - J Yang

0

虽然我仍然需要OP的更多调试结果,但我想我会尝试一下:

由于命令中的讨论表明,在与WP8手机交互时不会调用createNdefMessage回调,因此很有趣了解为什么会发生这种情况以及如何防止这种情况。不幸的是,我没有关于活动实际生命周期的详细信息,所以我只能猜测可能出错的地方。

  1. 注册的createNdefMessage回调未被调用的原因之一是注册回调的活动不再处于前台。因此,Android设备和WP8设备之间可能存在导致当前活动暂停的差异。

  2. 另一个原因可能是在Android NFC堆栈调用createNdefMessage回调方法之前,WP8设备中断了通信。但是,这应该是可以检测到的,因为Beam UI通常会在用户能够单击它之前消失。

导致原因1的一个可能是WP8设备本身发送了一个NDEF消息,导致Android设备上的意图处理。如果是这种情况,克服这个问题的方法可能是注册前台调度系统。这将防止常规意图处理,并直接将所有传入的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.");
        }
    }
}

抱歉我们还没有机会深入挖掘和获取其他细节来真正解决这个问题。我感谢您的耐心和反复排除故障的努力,所以赏金归您所有。 - Robert Levy
是的,我们也是 :) 一定会在有时间的时候回来,并在这里发布结果。 - Robert Levy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接