【问题标题】:Android Bluetooth Discovery BroadcasterReceiver not workingAndroid蓝牙发现广播接收器不工作
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 我知道。在我开始发现之前,我正在检查应用程序是否已授予这些权限。该应用程序在使用该应用程序时授予位置权限。但是蓝牙搜索绝对不行??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多