首页 > 解决方案 > 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

标签: androidbluetoothbroadcastreceiver

解决方案


手机蓝牙相关动作与网络无关。您的问题通常是由于缺少授权的位置权限引起的。当targetsdkversion 23或以上时,需要动态请求移动位置权限“android.permission.ACCESS_FINE_Location”可以搜索附近的蓝牙设备。当然可以将项目的targetsdkversion版本降低到23以下。这样,不需要动态申请权限,这里有一些不错的动态权限申请开源库,希望对你有所帮助: https://github.com/googlesamples/easypermissions https://github.com/permissions-dispatcher/权限调度程序


推荐阅读