如何搜索蓝牙设备?

时间:2019-04-12 14:53:29

标签: android bluetooth android-bluetooth

我想构建一个扫描本地蓝牙设备的应用程序。该应用会找到所有已配对的设备,但不会找到未配对的设备。我有一个按钮,当我按下按钮时,我想在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中停止。

1 个答案:

答案 0 :(得分:1)

从Android 6.0 /棉花糖开始,任何蓝牙扫描都需要满足以下两个条件:

  1. 位置权限(ACCESS_COARSE_LOCATION到目前为止已经足够,但在Android Q Beta apparently中还不够);
  2. 已启用并启用了位置服务。

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

您可以通过使用Google Play服务显示要求用户打开位置服务的弹出窗口来实现此目的,或者您可以在“设置”应用中重定向到位置服务,在此用户可以打开其设备位置服务。 / p>

同时满足两个条件后,如果有任何设备在范围内,设备将开始显示在日志中。

注意:这对于使用Bluetooth Classic的简单Bluetooth Discovery也有效。