【问题标题】:NFC: Bluetooth LE OOB Pairing + Android application launchNFC:蓝牙 LE OOB 配对 + Android 应用启动
【发布时间】:2019-09-18 09:09:51
【问题描述】:

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

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

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

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

还有其他解决方案吗?

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

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

感谢您的建议

【问题讨论】:

    标签: android bluetooth nfc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      每次连接蓝牙设备(具有特殊名称)时,我都能启动我的应用程序。 为此,我使用了一个广播接收器来监控事件 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 配置文件(我不知道为什么它不适用于其他配置文件)。

      【讨论】:

        猜你喜欢
        • 2011-08-11
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 2015-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多