皮皮网

皮皮网

【冰赋能源码】【智慧支付源码】【文案网源码】androidrssi定位源码_android定位代码

时间:2024-11-30 03:46:23 分类:知识

1.如何读取一次,定定位代码我连接的多个设备的rssi值

androidrssi定位源码_android定位代码

如何读取一次,我连接的多个设备的rssi值

       我在开发一个应用程序,需要连接到 Android 4.3 设备上的位源蓝牙设备。我能够通过 BluetoothGatt.readRemoteRssi() 方法从设备中获取 RSSI 值。定定位代码现在,位源我想要同时获取多个已连接设备的定定位代码冰赋能源码 RSSI 值。然而,位源智慧支付源码我注意到每次只能获取到最后连接的定定位代码设备的 RSSI 值。例如,位源假设有两个 BLE 设备 A 和 B。定定位代码我首先连接到设备 A 并获取其 RSSI 值。位源然后,定定位代码我连接到设备 B,位源并且能够获取到设备 B 的定定位代码文案网源码 RSSI 值。但是位源,我无法获取到设备 A 的定定位代码 RSSI 值,而是只能获取到设备 B 的 RSSI 值。

       在 Main.java 文件中,大厂hashmap源码我列出了所有已连接设备的位置。当我在列表中点击一个设备时,会将设备的名称和地址传递到 DeviceControl.java 文件。

       ```java

       final Intent qintent = new Intent(this,中原麻将源码 DeviceControl.class);

       HashMap select = (HashMap) devicelist.getItemAtPosition(arg2);

       String name = (String) select.get("name");

       String address = (String) select.get("address");

       qintent.putExtra(DeviceControl.EXTRAS_DEVICE_NAME, name);

       qintent.putExtra(DeviceControl.EXTRAS_DEVICE_ADDRESS, address);

       startActivity(qintent);

       ```

       DeviceControl.java 文件将调用 BluetoothLeService.java 文件并连接到设备。

       ```java

       private final ServiceConnection mServiceConnection = new ServiceConnection() {

        @Override

        public void onServiceConnected(ComponentName componentName, IBinder service) {

        // TODO Auto-generated method stub

        mBluetoothLeService = ((BluetoothLeService.LocalBinder) service).getService();

        if (!mBluetoothLeService.initialize()) {

        Log.e(TAG, "Unable to initialize Bluetooth");

        finish();

        }

        registerReceiver(mGattUpdateReceiver, makeGattUpdateIntentFilter());

        mBluetoothLeService.connect(mDeviceAddress);

        }

        @Override

        public void onServiceDisconnected(ComponentName componentName) {

        // TODO Auto-generated method stub

        mBluetoothLeService = null;

        }

       };

       ```

       BluetoothLeService.java 文件负责连接到设备。

       ```java

       public boolean connect(final String address) {

        if (mBluetoothAdapter == null || address == null) {

        Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");

        return false;

        }

        if (mBluetoothDeviceAddress != null && address.equals(mBluetoothDeviceAddress) && mBluetoothGatt != null) {

        Log.d(TAG, "Trying to use an existing mBluetoothGatt for connection.");

        if (mBluetoothGatt.connect()) {

        mConnectionState = STATE_CONNECTING;

        return true;

        } else {

        return false;

        }

        }

        final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);

        if (device == null) {

        Log.w(TAG, "Device not found. Unable to connect");

        return false;

        }

        mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

        Log.d(TAG, "Try to create a new connection");

        mBluetoothDeviceAddress = address;

        mConnectionState = STATE_CONNECTING;

        return true;

       }

       ```

       连接到设备后,我可以使用 readRemoteRssi() 方法从设备中读取 RSSI 值。

       ```java

       public void readRemoteRssi() {

        mBluetoothGatt.readRemoteRssi();

       }

       ```

       然而,我注意到每次只能读取到最后连接的设备的 RSSI 值。当我查看日志时,我发现它总是发送 onCharacteristicWrite 和 readRemoteRssi() 调用到我最后连接的设备。为了解决这个问题,我考虑了以下几种方法:

       1. 创建多个 BluetoothGatt 对象来分别连接多个设备,并逐一调用 readRemoteRssi() 方法。

       ```java

       BluetoothGatt mBluetoothGatt1 = device1.connectGatt(this, false, mGattCallback);

       BluetoothGatt mBluetoothGatt2 = device2.connectGatt(this, false, mGattCallback);

       ```

       这种方法的缺点是它比较繁琐,并且需要管理多个 BluetoothGatt 对象。另一种解决方案是重新连接到第一个设备,然后再尝试读取或写入 CharacteristicWrite 值的设备。这样可以确保我能够读取所有已连接设备的 RSSI 值。