【发布时间】:2020-12-11 19:36:01
【问题描述】:
我就是无法让 Android 扫描蓝牙设备。我尝试了几种不同的方法,但它们都不起作用。这是我最新的代码。
// Create a BroadcastReceiver for ACTION_FOUND.
devicesFoundReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// Discovery has found a device. Get the BluetoothDevice
// object and its info from the Intent.
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
String deviceName = device.getName();
String deviceHardwareAddress = device.getAddress(); // MAC address
devicesListArray.add(deviceName + "\n" + deviceHardwareAddress);
arrayAdapter.notifyDataSetChanged();
}
}
};
我这样注册接收器:
_thisContext.registerReceiver(devicesFoundReceiver, filter);
我的清单具有以下权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
我打电话
bluetoothAdapter.startDiscovery();
广播接收器上的 OnReceive NEVER 触发。 我厌倦了查看千千万万个不同的网站,有些采用相同的方法,有些则没有。但它们都不起作用。我做错了什么?
这里是SDK版本供参考:
minSdkVersion 26
targetSdkVersion 30
【问题讨论】:
-
您的设备是否开启了定位服务?在某些(大多数)Android 设备上获取您需要的扫描结果:BLE 权限、位置权限、BLE 开启、定位服务开启。另外,您能在系统设置中看到 BLE 设备吗?当您从设置返回到您的应用后,它们是否会被发现?
-
另外,位置权限是运行时权限。您需要使用
Activity.requestPermissions在代码中请求它们。 -
在我注册甚至开始发现之前,我会检查蓝牙是否打开以及应用程序是否具有粗略定位权限。还是不行
-
确定一下,您是否也开启了定位服务(在设备设置中)?权限不够。
标签: android bluetooth broadcastreceiver