当前位置: 首页 > 面试题库 >

从Android中的蓝牙设备读取数据

乜坚成
2023-03-14
问题内容

我正在使用蓝牙聊天功能,以便连接和接收来自蓝牙设备的数据。

我使用以下代码读取数据:

public void run() {
    byte[] buffer = new byte[1024];
    int bytes;
    Log.v("MR", "start listening....");

    // Keep listening to the InputStream while connected
    while (true) {
        try {
            // Read from the InputStream
            Log.d("MR", "buffer in try");

            bytes = mmInStream.read(buffer);
            Log.d("MR", "input stream :"+(new String(buffer)));
            // Send the obtained bytes to the UI Activity
            mHandler.obtainMessage(Conn.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
            Log.d("MR", "buffer after");

        } catch (Exception e) {
            Log.e("MR", "Error :"+e.getMessage());
            //
            connectionLost();
           // break;
        }

        Log.d("MR", "buffer after while");
    }
}

设备一直在发送数据而不会停止。

通过上面的代码,我得到以下消息:

Log.d("MR", "buffer in try");

然后转到下一行:

bytes=mmInStream.read(buffer);

并且永远不会从该呼叫中返回。我猜这是因为它开始从设备读取数据,并且直到断开连接才停止。如何一次读取一定数量的字节?

编辑

除非bytes = mmInStream.read(buffer);由于它不保留代码,否则不从设备取回任何数据?


问题答案:

我改用DataInputStreams,因为您可以执行readFully()方法,该方法在返回之前等待读取一定数量的字节。我这样设置BT连接:

BluetoothDevice btDevice = bta.getRemoteDevice(macAddress);
BluetoothSocket btSocket = InsecureBluetooth.createRfcommSocketToServiceRecord(
                    btDevice, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"), false);

btSocket.connect();
InputStream input = btSocket.getInputStream();
DataInputStream dinput = new DataInputStream(input);

然后稍后当我想阅读时,我使用readFully:

dinput.readFully(byteArray, 0, byteArray.length);


 类似资料:
  • 我是新来的JavaScript,所以我可能有一些非常规的编程方式。也就是说,我正在做一个项目,我需要读写数据到自定义BLE设备。我使用gatt服务器协议进行连接。我能够与设备连接,但现在我试图从寄存器中读取数据。 我看了从谷歌以及网络蓝牙github的网络样本,但我无法理解它。下面的代码是我目前试图打破这一点。早期的尝试让我陷入了这样一个事实,即我得到的值是一个对象或一个promise对象。

  • 有没有办法在Android上ping蓝牙设备?Android中没有连接或配对蓝牙设备,但我事先知道设备的MAC地址和PIN。我试图实现的是ping一个MAC地址列表,看看是否有任何设备在范围内。

  • 我如何获得Android所有已连接蓝牙设备的列表,而不考虑配置文件? 或者,我看到您可以通过BluetoothManager获取特定配置文件的所有连接设备。获取连接的设备。 我想我可以通过ACTION_ACL_CONNECTED/ACTION_ACL_DISCONNECTED监听连接/断开来查看哪些设备连接...似乎容易出错。 但我想知道是否有更简单的方法来获取所有已连接蓝牙设备的列表。

  • ap.readBLECharacteristicValue(OPTION, CALLBACK) 读取低功耗蓝牙设备特征值中的数据。调用后在 ap.onBLECharacteristicValueChange() 事件中接收数据返回。 OPTION 参数说明 名称 类型 必填 描述 deviceId String 是 蓝牙设备 id,参考 device 对象 serviceId String 是 蓝

  • 问题内容: 我正在创建一个应通过蓝牙连接到特定设备的应用程序。 无论设备是否已配对,我都希望我的应用程序与此设备连接。 现在我有这个 但是此功能仅连接到配对的设备。如果我的设备尚未配对,我想将其配对。不知道该怎么做。 有人可以给我任何建议吗? 问题答案: 首次请求权限。 然后使您的设备可发现: 然后创建一个 BroadcastReceiver 来监听系统中的动作: 并通过注册以下 Boardcas

  • 我可以在Android中看到蓝牙设备的两种状态。1、配对2。已连接-<我正在尝试在Android系统中使用当前连接的蓝牙设备。但我只从适配器获得配对设备列表。getBondedDevices() 我需要当前连接的设备。我怎么能得到这个。请有人帮我实现这一点。提前谢谢。