我有一个包含MCU +蓝牙LE接口+ NFC接口的物联网设备。
在NFC标记中,我编写了一条NDEF消息,以便使用带外(OOB)数据进行蓝牙配对。通过这种方式,如果有人将他的智能手机放在NFC标签上,他可以通过蓝牙LE自动连接到物联网设备。
我现在想知道如何在智能手机上启动一个应用程序,该应用程序将与物联网设备通信以显示数据。
在NFC标记中,我可以使用AAR记录,但我已经有了NDEF记录。将这2条记录放入NDEF是可能的,但我怀疑它是否会起作用。我希望Android会问我该处理哪一个。
有没有其他的解决方案?
如果我只使用NFC标记中的蓝牙配对记录,配对就完成了,我应该找到一种方法来启动我的应用程序。在我的应用程序中,我可以使用后台服务和广播接收器,每次蓝牙连接时都会收到通知。我还没有尝试过,但我认为这可能是一种在连接蓝牙设备时唤醒我的应用程序的方法。它会检查设备的配置文件。如果它是预期的配置文件,它将继续并显示数据。我不知道这是不是个好主意。
我对蓝牙LE不熟悉。有没有办法告诉Android,我的应用程序应该在每次连接具有给定配置文件的蓝牙LE设备时启动?
谢谢你的建议
发布于 2019-10-10 20:53:10
每次连接蓝牙设备(具有特殊名称)时,我都可以启动我的应用程序。为此,我使用监视事件BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED:的广播接收器
@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配置文件(我不知道为什么它不能工作的其他配置文件)。
发布于 2019-09-20 20:03:44
首先,当你的NDEF有两条记录时,android会查看你的第一条记录。您可以通过编辑清单来回答您的问题。This answer可以提供很多帮助。
https://stackoverflow.com/questions/57989084
复制相似问题