如何搜索蓝牙设备?

问题描述 投票:0回答:1

我想构建一个扫描本地蓝牙设备的应用程序。该应用找到所有配对设备,但没有未配对的设备。我有一个按钮,当我按下它时,我想在Log找到的设备中看到。

AndroidManifest我添加了BLUETOOTHBLUETOOTH_ADMINACCESS_COARSE_LOCATION的权限。

onCreate我得到默认的BluetoothAdapter并获得配对的设备。

protected void onCreate(Bundle savedInstanceState) {
....
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if(!bluetoothAdapter.isEnabled()) {
            Intent enable = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enable, REQUEST_ENABLE_BT);
        }
    pairedDevices = bluetoothAdapter.getBondedDevices();
        ///Add paired Devices
        for(BluetoothDevice device : pairedDevices){
            Log.i("DEVICE", device.getAddress()+" "+device.getName());
            devicesList.add(device);
        }
}

onClick我做scanDevices功能,我使用ScanCallBack

final ScanCallback scanCallback = new ScanCallback() {
    @Override
    public void onScanResult(int callbackType, ScanResult result) {
       super.onScanResult(callbackType, result);
       if(!devicesList.contains(result.getDevice())) {
          Log.i("DEVICE", result.getDevice().getName()+ "  "+result.getDevice().getAddress());
          devicesList.add(result.getDevice());
                }
            }
            @Override
            public void onScanFailed(int errorCode) {
                super.onScanFailed(errorCode);
            }
        };

 bluetoothAdapter.getBluetoothLeScanner().startScan(scanCallback);
 new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
              bluetoothAdapter.getBluetoothLeScanner().stopScan(scanCallback);     
            }
        }, 10000);
}

当我启动应用程序时它没有做任何事情,日志中没有打印设备,当我尝试调试它时,它甚至没有停在ScanCallBack中。

android bluetooth android-bluetooth
1个回答
1
投票

从Android 6.0 / Marshmallow开始,任何蓝牙扫描都需要以下两个条件:

  1. 位置权限(ACCESS_COARSE_LOCATION现在已经足够,但在Android Q Beta apparently中没有);
  2. 启用和启用位置服务。

因此,这意味着在运行Android 6或更高版本的任何设备上,您必须使用运行时权限请求系统来要求用户授予您访问其位置的权限。但这还不够,用户还必须打开他的位置服务(精度不是问题)。

您可以通过使用Google Play服务显示请求用户打开位置服务的弹出窗口,或者您可以在设置应用中重定向到位置服务,用户可以在其设备位置服务上切换。

一旦满足这两个条件,当然,如果任何条件在范围内,设备将开始显示在日志中。

注意:这对使用Bluetooth Classic的简单蓝牙发现也有效。

© www.soinside.com 2019 - 2024. All rights reserved.