首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NFC:蓝牙LE OOB配对+ Android应用发布

NFC:蓝牙LE OOB配对+ Android应用发布
EN

Stack Overflow用户
提问于 2019-09-18 17:09:51
回答 2查看 799关注 0票数 0

我有一个包含MCU +蓝牙LE接口+ NFC接口的物联网设备。

在NFC标记中,我编写了一条NDEF消息,以便使用带外(OOB)数据进行蓝牙配对。通过这种方式,如果有人将他的智能手机放在NFC标签上,他可以通过蓝牙LE自动连接到物联网设备。

我现在想知道如何在智能手机上启动一个应用程序,该应用程序将与物联网设备通信以显示数据。

在NFC标记中,我可以使用AAR记录,但我已经有了NDEF记录。将这2条记录放入NDEF是可能的,但我怀疑它是否会起作用。我希望Android会问我该处理哪一个。

有没有其他的解决方案?

如果我只使用NFC标记中的蓝牙配对记录,配对就完成了,我应该找到一种方法来启动我的应用程序。在我的应用程序中,我可以使用后台服务和广播接收器,每次蓝牙连接时都会收到通知。我还没有尝试过,但我认为这可能是一种在连接蓝牙设备时唤醒我的应用程序的方法。它会检查设备的配置文件。如果它是预期的配置文件,它将继续并显示数据。我不知道这是不是个好主意。

我对蓝牙LE不熟悉。有没有办法告诉Android,我的应用程序应该在每次连接具有给定配置文件的蓝牙LE设备时启动?

谢谢你的建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-10 20:53:10

每次连接蓝牙设备(具有特殊名称)时,我都可以启动我的应用程序。为此,我使用监视事件BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED:的广播接收器

代码语言:javascript
复制
@Override
public void onReceive(Context context, Intent intent) {
    final String action = intent.getAction();

    if (action.equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) {

        int extraConnectionState = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, -1);
        BluetoothDevice bluetoothDevice = intent.getExtras().getParcelable(BluetoothDevice.EXTRA_DEVICE);

        String deviceName = bluetoothDevice.getName();
        String deviceAddress = bluetoothDevice.getAddress();

        Log.d(TAG, "ACTION_CONNECTION_STATE_CHANGED Device: " + deviceName + ", Addr: " + deviceAddress + ", State: " + extraConnectionState);

        if (extraConnectionState == BluetoothAdapter.STATE_CONNECTED) {
            // We don't want to start our application everytimes a Bluetooth Device is connected.
            // Start our application only if the device has the expected name
            if (deviceName.equals(EXPECTED_DEVICE_NAME)) {
                // Start my application
                final Intent intent2 = new Intent(context, XXXXX.class);
                intent2.putExtra(EXTRAS_DEVICE_NAME, deviceName);
                intent2.putExtra(EXTRAS_DEVICE_ADDRESS, deviceAddress);
                intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                        
                startActivity(intent2);
            }
        }
    }
}

这是工作,但只有当设备有一个HID配置文件(我不知道为什么它不能工作的其他配置文件)。

票数 0
EN

Stack Overflow用户

发布于 2019-09-20 20:03:44

首先,当你的NDEF有两条记录时,android会查看你的第一条记录。您可以通过编辑清单来回答您的问题。This answer可以提供很多帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57989084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档