Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onLeScan函数在尝试检测可扩展设备时未调用_Android_Android Service_Bluetooth Lowenergy - Fatal编程技术网

Android onLeScan函数在尝试检测可扩展设备时未调用

Android onLeScan函数在尝试检测可扩展设备时未调用,android,android-service,bluetooth-lowenergy,Android,Android Service,Bluetooth Lowenergy,我正在尝试检测服务上附近的蓝牙低能设备。 当服务启动时,调用startedscan(),然后在10秒后调用stopLeScan()。 尽管startedscan()返回true,并且我没有得到任何错误,但是lescallback上的onLeScan没有被调用。 服务: . . . // Device scan callback. private BluetoothAdapter.LeScanCallback mLeScanCallb

我正在尝试检测服务上附近的蓝牙低能设备。 当服务启动时,调用startedscan(),然后在10秒后调用stopLeScan()。 尽管startedscan()返回true,并且我没有得到任何错误,但是lescallback上的onLeScan没有被调用。 服务

    .
    .
    .
            // Device scan callback.
        private BluetoothAdapter.LeScanCallback mLeScanCallback =
                new BluetoothAdapter.LeScanCallback() {

                    public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
                        Log.i(TAG, "New LE Device: " + device.getName() + " @ " + rssi);
                        if (DEVICE_NAME.equals(device.getName()) && deviceAddress.equals(device.getAddress())) {
                            mDevice = device;
                            BleScan(false);
                            connectBluetoothDevice();
                        }
                    }
                };

    /**
     * Starts and stops Bluetooth LE scanning for BLE devices.
     *
     * @param enable true to start scanning, false to stop scanning.
     */
    public void scanLeDevice(final boolean enable) {
        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (mScanning) {
                        BleScan(false);
                    }
                }
            }, SCAN_PERIOD);
            BleScan(true);
        } else {
            BleScan(false);
        }

    }

    /**
     * @param scan true to scan, and false to stop scanning for Bluetooth LE devices.
     */
    private void BleScan(boolean scan) {
        if (scan) {
            mScanning = true;
            boolean temp = mBluetoothAdapter.startLeScan(mLeScanCallback);
            Log.i(TAG, "Started LE scan: " + temp);
        } else {
            mScanning = false;
            mBluetoothAdapter.stopLeScan(mLeScanCallback);
        }
    }
我尝试使用BluetoothLeScannerstartScan()stopScan(),并改用ScanCallback,但没有任何帮助:

    ScanCallback mScanCallback = new ScanCallback() {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            Log.i(TAG, "New LE Device: " + result.getDevice().getName() + " @ " + result.getRssi());
        }

        @Override
        public void onScanFailed(int errorCode) {
            Log.i(TAG, "Scan Faild!!");
        }
    };


    /**
     * Starts and stops Bluetooth LE scanning for BLE devices.
     *
     * @param enable true to start scanning, false to stop scanning.
     */
    public void scanLeDevice(final boolean enable) {
        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (mScanning) {
                        BleScan(false);
                    }
                }
            }, SCAN_PERIOD);
            BleScan(true);
        } else {
            BleScan(false);
        }

    }

    /**
     * @param scan true to scan, and false to stop scanning for Bluetooth LE devices.
     */
    private void BleScan(boolean scan) {
        if (scan) {
            mScanning = true;
            mBluetoothLeScanner.startScan(mScanCallback);
            Log.i(TAG, "Started LE scan");
        } else {
            mScanning = false;
            mBluetoothLeScanner.stopScan(mScanCallback);
        }
    }
( uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" )
有人说需要打开GPS,所以我打开了GPS。 我试着重新启动android设备。 另一个BLE检测应用程序可以看到BLE设备

为什么不调用扫描回调

编辑


我在运行安卓6.0.1的Nexus5设备上运行这个应用程序

我尝试添加位置权限,但没有帮助:

    ScanCallback mScanCallback = new ScanCallback() {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            Log.i(TAG, "New LE Device: " + result.getDevice().getName() + " @ " + result.getRssi());
        }

        @Override
        public void onScanFailed(int errorCode) {
            Log.i(TAG, "Scan Faild!!");
        }
    };


    /**
     * Starts and stops Bluetooth LE scanning for BLE devices.
     *
     * @param enable true to start scanning, false to stop scanning.
     */
    public void scanLeDevice(final boolean enable) {
        if (enable) {
            // Stops scanning after a pre-defined scan period.
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (mScanning) {
                        BleScan(false);
                    }
                }
            }, SCAN_PERIOD);
            BleScan(true);
        } else {
            BleScan(false);
        }

    }

    /**
     * @param scan true to scan, and false to stop scanning for Bluetooth LE devices.
     */
    private void BleScan(boolean scan) {
        if (scan) {
            mScanning = true;
            mBluetoothLeScanner.startScan(mScanCallback);
            Log.i(TAG, "Started LE scan");
        } else {
            mScanning = false;
            mBluetoothLeScanner.stopScan(mScanCallback);
        }
    }
( uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" )
我也有类似的问题。 同样的代码,一个平板电脑不能工作,但另一个可以。 我没有解决方案,但当我重置平板电脑并重新安装apk时,它可以再次正常工作

我找到了这个
当我打开gps时,它工作了…

尝试打开应用程序设置(设置->应用程序->你的应用程序->规则->位置数据)中的位置数据访问功能。

谷歌文档的后续操作:

1.将这些行添加到清单中

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

<!-- Required only if your app isn't using the Device Companion Manager. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  • 如果全部无效,请在“设置”>“应用程序管理”>“应用程序”>“权限”中检查应用程序权限。允许位置访问。完成了

  • 你能告诉我们,你使用的是哪款手机和安卓版本吗?Android 6需要位置权限才能获得扫描结果。我正在运行Android 6.0.1的nexus 5设备上运行此应用程序。我尝试添加位置权限,但没有任何帮助。@AmitaiFensterheim您的目标SDK是什么?如果您的目标是>=23,您也必须在运行时明确请求权限。只需添加到SJoshis注释中,请看一下,这将解释如何请求适当的权限谢谢!它起作用了!为什么蓝牙LE需要位置许可?我应该使用哪种BLE扫描功能,startScan还是startScan?