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

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

我正在开发一个应用程序有连接到蓝牙设备的 Android 4.3。

我可以连接到 BLE 设备和从设备中读取 RSSI,通过使用 BluetoothGatt.readRemoteRssi()。

我想要读的多个设备一次我已连接,但我可以只读 BLE RSSI 设备 RSSI 的最后一次,我连接的设备。

如果有两个 BLE 设备 A 和 B。我连接到A 的设备,并读取该 RSSI。之后,我连接到B 的设备,和我可以从设备 B读取 RSSI。但它并不读取设备 A的 RSSI,它只能从设备 B读取 RSSI。

在Main.java ,它列出已连接的位置的所有设备。

当我单击该设备,在列表上,它把传送的设备的名称和地址到DeviceControl.java。

final Intent qintent = new Intent(this, DeviceControl.class);

devicelist.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?>arg0, View arg1, int arg2,

long arg3) {

// TODO Auto-generated method stub

HashMap<String, Object>select = (HashMap<String, Object>) 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和连接到设备。

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将连接到该设备。

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。

public void readRemoteRssi() {

mBluetoothGatt.readRemoteRssi();

}

但它只能读取 RSSI 的最后一个设备的我已连接。

当我看到日志时,它总是发送onCharacteristicWrite和readRemoteRssi()到我连接的最后一个设备。

我应该重新连接关贸总协定 》 或之前我想 RSSI 对读取或写入的 CharacteristicWrite 值的第一个设备重新连接到的第一个地址的设备概览

它不会有其他的方法来读取我已连接的所有设备的 RSSI 概览

解决方法 1:

使多个 BluetoothGatt 对象来连接多个设备分开,并调用 readRemoteRssi 一个接一个。

懒的和坏的示例中,您应该能够将那些 BluetoothGatt 对象放入数组

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

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

笔记本查看mac地址的方法:

1、鼠标左键点击任务栏的“开始”按钮→运行→在d出的“运行”窗口的“打开”文本框内输入“cmd”,然后单击“确定”按钮:

系统将d出如下窗口

2、在新窗口中输入命令“ipconfig /all”后回车,在显示的结果中找到类似

Physical Address. . . . . . . . . : 00-E0-4C-3F-14-DE行,其中类似“00-E0-4C-3F-14-DE”的地址即为当前机器的网卡的mac地址。

要拿到蓝牙信号指示值 rssi 分为两个步骤。

1.在oncreate方法里面增加 注册扫描广播

public void onCreate(Bundle savedInstanceState) {

// 注册开始发现广播。

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED)

this.registerReceiver(mReceiver, filter)

}

2.新建BroadcastReceiver广播对象,并实现里面的onreceive方法,在onreceive得到rssi(信号强度)。

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

@Override


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8084326.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存