android - Android蓝牙发现广播接收器不工作
问题描述
我只是无法让 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永远不会触发。我厌倦了查看千千万万个不同的网站,有些采用相同的方法,有些则没有。但它们都不起作用。我究竟做错了什么?
以下是供参考的 SDK 版本:
minSdkVersion 26
targetSdkVersion 30
解决方案
手机蓝牙相关动作与网络无关。您的问题通常是由于缺少授权的位置权限引起的。当targetsdkversion 23或以上时,需要动态请求移动位置权限“android.permission.ACCESS_FINE_Location”可以搜索附近的蓝牙设备。当然可以将项目的targetsdkversion版本降低到23以下。这样,不需要动态申请权限,这里有一些不错的动态权限申请开源库,希望对你有所帮助: https://github.com/googlesamples/easypermissions https://github.com/permissions-dispatcher/权限调度程序
推荐阅读
- mysql - 如何在设计表格时实现一对一的关系。\
- pandas - 如何在 google-colaboratory 上读取腌制的 utf-8 数据帧
- python - Pandas - 在不同数据框的两列之间“选择条件存在的位置”
- typescript - 如何转换 NSArray
结果变成打字稿对象? - java - 如何实现一个定时器,它会在 5 秒后自动将 JTextArea 设置为下一行?
- r - 在输出中保持 DT 表的行高相同
- python - 使用回溯和递归的 N 皇后问题中的错误
- python - 如果输入已经排序,如何避免在对二次方程的输出进行排序的问题中出现索引错误?
- java - Stream.of 和 IntStream.range 有什么区别?
- pycharm - PyCharm如何设置默认重构重命名范围