首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当手机处于睡眠模式时,扫描蓝牙LE设备不起作用。在doze模式下不调用CallBack方法

当手机处于睡眠模式时,扫描蓝牙LE设备不起作用。在doze模式下不调用CallBack方法
EN

Stack Overflow用户
提问于 2020-07-18 04:20:34
回答 1查看 322关注 0票数 2

我正在开发一个Android应用程序(该应用程序在Android 6上运行):我希望该应用程序在靠近BLE设备(我家里的设备)时向用户发送通知。所以我不断地扫描,我通过一个服务(在后台运行)进行扫描。当手机屏幕打开时,它工作得很好;但是,当屏幕关闭时,几秒钟后,应用程序再也找不到BLE (扫描仍在运行,但没有回调。

代码语言:javascript
运行
复制
if (enable) {
            if (mScanning) return;
            // Stops scanning after a pre-defined scan period.
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (!mScanning) return;
                    try {
                        mScanning = false;
                        mBluetoothLeScanner.stopScan(mScanCallback);
                        Log.i(TAG_LOG, "Stop scanning after pre-defined scan periode");

                    } catch (Exception e){Log.e(TAG_LOG,"mBluetoothLeScanner.stopScan Exception:=>"+e.getMessage());}
                }
            }, SCAN_PERIOD);

            mScanning = true;
            mBluetoothLeScanner.startScan(filters, settings, mScanCallback);
            Log.i(TAG_LOG, "Start scanning ....");
        }



 private ScanCallback mScanCallback = new ScanCallback() {
    //When a BLE advertisement has been found
    @Override
    public void onScanResult(int callbackType, ScanResult result) {
        super.onScanResult(callbackType, result);
        Log.i(TAG_LOG, "Name: "+result.getDevice().getName()+". Adresse: "+result.getDevice().getAddress()+". Rssi: "+result.getRssi());
        //scanDevices(false);
        if(result.getDevice().getName() != null && result.getDevice().getName().toString().equals(deviceName)){
            mDeviceAdress = result.getDevice().getAddress();
            mDevice = mBluetoothAdapter.getRemoteDevice(mDeviceAdress);
            Log.i(TAG_LOG, "Device found");
            scanDevices(false);
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2020-07-18 18:36:06

你不能让它起作用。扫描是一个非常昂贵的操作,Android不允许在后台进行扫描。而应尝试连接到该设备。我在WorkManager作业中成功地做到了这一点,每15分钟运行一次。电池消耗可以忽略不计,而且非常可靠。请注意,连接状态0x85通常表示设备超出范围,0x80表示已连接到不同的设备(或电话已连接到太多不同的设备)。完整的错误列表位于https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/master/stack/include/gatt_api.h#27

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62961270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档