var main = plus.android.runtimeMainActivity();
var Context = plus.android.importClass("android.content.Context");
var BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
plus.android.importClass(BManager); //引入相关的method函数
var BAdapter = BManager.getAdapter();
plus.android.importClass(BAdapter); //引入相关的method函数,这样之后才会有isEna
var lists = BAdapter.getBondedDevices();
console.log(lists)
plus.android.importClass(lists);
var iterator = lists.iterator();
plus.android.importClass(iterator);
while (iterator.hasNext()) {
var d = iterator.next();
plus.android.importClass(d);
console.log("名称:" + d.getName() + ",地址:" + d.getAddress());
}
- 发布:2023-04-06 11:05
- 更新:2023-04-06 13:52
- 阅读:349
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win10
HBuilderX类型: 正式
HBuilderX版本号: 3.7.9
手机系统: Android
手机系统版本号: Android 12
手机厂商: 华为
手机机型: 华为P50E
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
const bluetooth_list = () => {
var main = plus.android.runtimeMainActivity();
var Context = plus.android.importClass("android.content.Context");
var BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
plus.android.importClass(BManager); //引入相关的method函数
var BAdapter = BManager.getAdapter();
plus.android.importClass(BAdapter); //引入相关的method函数,这样之后才会有isEna
var lists = BAdapter.getBondedDevices();
console.log(lists)
plus.android.importClass(lists);
var iterator = lists.iterator();
plus.android.importClass(iterator);
while (iterator.hasNext()) {
var d = iterator.next();
plus.android.importClass(d);
console.log("名称:" + d.getName() + ",地址:" + d.getAddress());
}
}
const bluetooth_list = () => {
var main = plus.android.runtimeMainActivity();
var Context = plus.android.importClass("android.content.Context");
var BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
plus.android.importClass(BManager); //引入相关的method函数
var BAdapter = BManager.getAdapter();
plus.android.importClass(BAdapter); //引入相关的method函数,这样之后才会有isEna
var lists = BAdapter.getBondedDevices();
console.log(lists)
plus.android.importClass(lists);
var iterator = lists.iterator();
plus.android.importClass(iterator);
while (iterator.hasNext()) {
var d = iterator.next();
plus.android.importClass(d);
console.log("名称:" + d.getName() + ",地址:" + d.getAddress());
}
}
预期结果:
获取已经匹配的蓝牙
获取已经匹配的蓝牙
实际结果:
null
null
bug描述:
在 3.4版没有问题
在3.5 3.6 3.7 版本以后 BAdapter.getBondedDevices() 就会获取null
2 个回复
星拾夜暝
首先,我们需要检查一下是否给蓝牙相关的权限。如果没有给予权限的话,那么就会导致onReceive监听无任何响应。因此,在使用BAdapter.startDiscovery()方法之前,我们需要确保已经给予了相应的权限。
其次,我们需要检查一下系统设置,确保蓝牙已经打开。如果蓝牙没有打开,那么onReceive监听同样会无响应。因此,在使用BAdapter.startDiscovery()方法之前,我们需要确保蓝牙已经打开。
最后,我们可以尝试更新一下蓝牙的驱动程序,或者调整一下蓝牙的一些参数。这些操作可能会对onReceive监听产生影响,从而导致无响应的情况。
星拾夜暝
如果在3.5、3.6、3.7版本以后,BluetoothAdapter.getBondedDevices()方法返回null,则可能是因为Android更改了该方法的行为。该方法返回的是已配对的蓝牙设备集合,但在某些情况下,它可能返回null。为了解决这个问题,您可以尝试以下几个步骤:
确保您的设备上有已配对的蓝牙设备。如果您的设备没有已配对的蓝牙设备,那么BluetoothAdapter.getBondedDevices()方法将返回一个空的集合。您可以尝试配对一个蓝牙设备,然后再次调用该方法。
尝试使用BluetoothDevice.ACTION_BOND_STATE_CHANGED广播来监听设备配对状态的变化。该广播将在设备配对状态发生变化时发送。您可以使用以下代码注册广播接收器:
然后,您可以在onReceive()方法中处理广播:
注意,您需要根据您的需求修改上述代码。
尝试使用BluetoothDevice.fetchUuidsWithSdp()方法来获取设备的UUID。该方法将触发BluetoothDevice.ACTION_UUID广播,该广播将包含设备的UUID。您可以使用以下代码来获取设备的UUID:
device.fetchUuidsWithSdp();
然后,您可以在onReceive()方法中处理广播:
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_UUID.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Parcelable[] uuids = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
if (uuids != null) {
for (Parcelable uuid : uuids) {
// Do something with the UUID
}
}
}
}
最后,您可以尝试使用不同的API版本。您可以使用以下代码检查您的设备支持的API版本:
int currentApiVersion = android.os.Build.VERSION.SDK_INT;