BLE扫描不工作

Posted

技术标签:

【中文标题】BLE扫描不工作【英文标题】:BLE Scan not working 【发布时间】:2018-06-12 09:59:40 【问题描述】:

我是使用 Google 示例代码开发 BLE 扫描仪的初学者:https://github.com/googlesamples/android-BluetoothLeGatt

目前,该代码无法检测到任何设备。 This post 说这是因为位置服务被禁用或在运行时没有被明确要求。我已经在我的清单中包含了所需的权限。

我添加了几行代码,我认为应该可以。

@Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        getActionBar().setTitle(R.string.title_devices);
        mHandler = new Handler();


        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) 
            Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
            finish();
        

        // Initializes a Bluetooth adapter.  For API level 18 and above, get a reference to
        // BluetoothAdapter through BluetoothManager.
        final BluetoothManager bluetoothManager =
                (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
        mBluetoothAdapter = bluetoothManager.getAdapter();

        // Checks if Bluetooth is supported on the device.
        if (mBluetoothAdapter == null) 
            Toast.makeText(this, R.string.error_bluetooth_not_supported, Toast.LENGTH_SHORT).show();
            finish();
            return;
        



    // Quick permission check
        int permissionCheck = this.checkSelfPermission("Manifest.permission.ACCESS_FINE_LOCATION");
        permissionCheck += this.checkSelfPermission("Manifest.permission.ACCESS_COARSE_LOCATION");
        if (permissionCheck != 0) 

            this.requestPermissions(new String[]Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, 1001); //Any number
        

    

我认为我添加的快速权限检查应该可以工作,但该应用似乎仍然没有检测到任何设备。

【问题讨论】:

您是否确定在年级中包含了您可能需要的任何依赖项? 嘿 Scott,这就是我的依赖项中的内容: compile "com.android.support:support-v4:27.0.2" compile "com.android.support:support-v13:27.0. 2" 编译"com.android.support:cardview-v7:27.0.2" 编译"com.android.support:appcompat-v7:27.0.2" 我不确定这是否就是我所需要的。 我不确定 100% 但如果您使用 API 23 或更高版本。您可以插入一些代码来获取位置。您的设备是哪个版本的? 【参考方案1】:

我遇到了与您面临的相同情况。如果您使用的是 android 6.0 或更高版本。您必须在运行时请求位置许可。获得蓝牙适配器后,我们插入如下代码行请求位置权限。当您的应用运行时,将显示一个对话框,询问您是否同意共享您的位置。

ActivityCompat.requestPermissions(this,new String[]Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, 1001);

如果这不是您问题的正确答案,请回复我的答案,我将立即删除。

【讨论】:

【参考方案2】:

onscannerregistered status =133

这可能是由于以下原因。

1) 应用程序中未提供位置权限。

2)连接到设备时停止扫描,然后连接到设备。

3) 当我们向设备读取/写入数据时,不应发生扫描。 确保扫描已停止

4)如果开始第一次扫描,应该等到扫描完成后再开始第二次扫描。

5) 多次扫描而不等待上一次扫描完成可能会导致找不到扫描回调。

试试fast BLE Library 更有效的 Google BLE 库可用。

【讨论】:

以上是关于BLE扫描不工作的主要内容,如果未能解决你的问题,请参考以下文章

由于位置许可,BLE 蓝牙扫描无法在 Android 10 和 11 上运行

iOS - 在后台扫描 BLE 设备

iOS BLE使用(用户)杀死App进行扫描

NewAer 通过 BLE 发送图像

使用 Ionic Native BLE 向 BLE 外围设备发出写入值

在 iPhone 上启用 BLE。默认不工作