通过NFC发送URL以供浏览器打开

5
我希望能够通过NFC发送URL,以便在安卓手机上接收并打开该链接。这个操作是否可行?

只有当应用程序(“浏览器”)被配置/注册才能这样做。如果您编写自己的浏览器,可以支持它,但不确定标准Android浏览器或Chrome是否支持。 - Tobrun
默认的安卓浏览器不是已经可以通过NFC发送链接了吗? - user1681001
是的,但我相信这仅限于浏览器处于激活状态时。在您的情况下,您希望在读取标签时打开已注册的应用程序。我不认为默认浏览器支持此功能。我会查一下。 - Tobrun
4个回答

4

在我苦思冥想了几个小时并浏览了许多帖子后,我发现我所需要做的就是实现NdefCallbacks并在"createNdefMessage"方法中设置URI。

首先实现NdefCallbacks。

public class MyActivity implements CreateNdefMessageCallback, OnNdefPushCompleteCallback {

添加未实现的方法

@Override
public NdefMessage createNdefMessage(NfcEvent event) {  
    ...
}
...
@Override
public void onNdefPushComplete(NfcEvent arg0) {
    ...
}

在您的活动顶部创建一个NFC适配器。
NfcAdapter mNfcAdapter;

在onCreate方法中设置NFC适配器。

mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
if(mNfcAdapter != null) {
    // Register callback to set NDEF message
    mNfcAdapter.setNdefPushMessageCallback(this, this);

    // Register callback to listen for message-sent success
    mNfcAdapter.setOnNdefPushCompleteCallback(this, this);
} else {
    Log.i("LinkDetails", "NFC is not available on this device");
}

然后在您的createNdefMessage方法中加入以下内容:
return new NdefMessage(new NdefRecord[] {
    NdefRecord.createUri(YOUR_URL_HERE)
});

轻点一下,Android 就会处理剩下的事情。

感谢 TAPPED 的指南,让我成功实现了 NFC 的 3/4。


2
不要忘记在应用清单中添加NFC权限:<uses-permission android:name="android.permission.NFC"/> - https://developer.android.com/reference/android/Manifest.permission.html#NFC - Mike Jarema

3

当然可以。

只需将包含网站URL的NDEF格式记录放入标签中即可完成操作。

Android SDK中有很多例子。


1
你好,能否提供一个例子呢?我想从一部手机发送一个任意的URL,例如wwwm.google.com。 - user1681001

1

代码块来自Android参考:

这就是你想做的事情,但你不能改变默认的Android浏览器的意图过滤器。

通过标签分派系统处理从NFC标签读取NDEF数据,该系统分析发现的NFC标签,适当地对数据进行分类,并启动对分类数据感兴趣的应用程序。想要处理扫描的NFC标签的应用程序可以声明一个意图过滤器并请求处理数据。

如果应用程序支持波束功能,则支持以下功能:

Android Beam™功能允许设备通过物理敲击设备将NDEF消息推送到另一个设备上。与其他无线技术(如蓝牙)相比,此交互提供了一种更简单的发送数据方式,因为使用NFC时不需要手动设备发现或配对。当两个设备进入范围时,连接会自动启动。 Android Beam可通过一组NFC API使用,因此任何应用程序都可以在设备之间传输信息。例如,联系人、浏览器和YouTube应用程序使用Android Beam与其他设备共享联系人、网页和视频。

你看到两者之间的区别了吗?

希望这有所帮助。


1
使用以下代码,激活安卓NFC Beam功能。 最重要的是加上"http://"前缀。我相信大多数用户在追踪这个问题时都会卡在这里。
@Override
public NdefMessage createNdefMessage(NfcEvent event) {
    NdefMessage msg = new NdefMessage(new NdefRecord[] { 
        NdefRecord.createUri("http://www.google.com")
    });
    return msg;
}

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