首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BluetoothLeScanner找不到回调包装

BluetoothLeScanner找不到回调包装
EN

Stack Overflow用户
提问于 2016-11-29 17:56:14
回答 4查看 18.7K关注 0票数 11

因为我在安卓棒棒糖上使用蓝牙时遇到了问题,所以我试着改变了扫描方式。

所以我试着使用新的包。在以前的版本中,我调用了startScan(mLeScanCallback),一切都正常,但是现在,当我调用startScan(mScanCallback)时,我得到了错误:"D/BluetoothLeScanner:找不到回调包装“。

找不到任何设备,并且我用来显示设备的ListAdapter为空。

注释行是前面的代码(并且它起作用了!)。这是我的代码:

代码语言:javascript
复制
public class Selection extends ListActivity implements ServiceConnection {

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mHandler = new Handler();

        // Initializes a Bluetooth adapter through BluetoothManager.
        final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
        mBluetoothAdapter = bluetoothManager.getAdapter();



        getApplicationContext().bindService(new Intent(this, MetaWearBleService.class), this, Context.BIND_AUTO_CREATE);

}

private void scanLeDevice(final boolean enable) {
    final BluetoothLeScanner bluetoothLeScanner = mBluetoothAdapter.getBluetoothLeScanner();

    if (enable) {

        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {

                //mBluetoothAdapter.stopLeScan(mLeScanCallback);
                bluetoothLeScanner.stopScan(mScanCallback);
                setListAdapter(listAdapter);

            }
        }, SCAN_PERIOD);


        //mBluetoothAdapter.startLeScan(mLeScanCallback);
        bluetoothLeScanner.startScan(mScanCallback);

   } else {

        //mBluetoothAdapter.stopLeScan(mLeScanCallback);
        bluetoothLeScanner.stopScan(mScanCallback);
        setListAdapter(listAdapter);

    }


}

private ScanCallback mScanCallback =
        new ScanCallback() {

            public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {

                        listAdapter.addDevice(device);

                    }
                });
            }
        };

相反,ListAdapter扩展了BaseAdapter并使用了ViewHolder。如果有必要,我会把它贴出来。

那么"D/BluetoothLeScanner:找不到回调包装器“是什么意思呢?出什么问题了?

否则我怎么解决不了用安卓棒棒糖扫描的问题呢?在棒棒糖中,我经常会有关于BluetoothGatt的错误。我不知道如何缩小它(或解决它)。

谢谢

EN

回答 4

Stack Overflow用户

发布于 2017-03-16 05:45:21

每当安卓的蓝牙扫描app被告知顶部停止扫描应用程序时,当他们认为扫描还没有启动时,日志消息D/BluetoothLeScanner: could not find callback wrapper就会出现。你可以通过查看Android的BluetoothLeScanner here的源代码来了解这一点。

忽略通常是安全的,因为有很多原因导致扫描实际上尚未开始(它已停止、蓝牙关闭、未授予权限等)。执行扫描的客户端软件通常会在计时器上停止扫描,而不管它是否已成功启动,或者是否在计时器关闭之前手动停止。Android的示例代码(以及上面显示的代码)就是这样做的,通常会导致显示这些日志消息。

如果您真的想最小化这些消息,您需要跟踪扫描是否实际开始,并仅在扫描确实开始时才停止扫描。不幸的是,如果扫描成功启动,就不会得到返回码;如果不能成功启动,就只会得到对onScanFailed(errorCode)的异步回调。因此,一种方法是在调用start scan时设置scanStartCount++;,并在收到onScanFailed(errorCode)回调时设置scanStartCount--;。然后,当计时器停止扫描时,只有在scanStartCount >0时才停止扫描。

请记住,您只能最小化来自应用程序的这些消息。手机上执行蓝牙扫描的其他应用程序可能也会导致这些消息被发送。

票数 24
EN

Stack Overflow用户

发布于 2017-04-01 17:14:22

我在安卓m.It上也遇到了同样的问题,那是因为我没有permissions.Make来确保你进入设置并授予你的应用程序定位权限

票数 2
EN

Stack Overflow用户

发布于 2019-05-07 16:06:05

对于相同的问题

我刚刚添加了权限:

代码语言:javascript
复制
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.
Manifest.permission.
Manifest.permission.BLUETOOTH_PRIVILEGED,

在您的活动中调用以下方法:

代码语言:javascript
复制
checkPermissions(MainActivity.this, this);


public static void checkPermissions(Activity activity, Context context){
    int PERMISSION_ALL = 1;
    String[] PERMISSIONS = {
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.BLUETOOTH,
            Manifest.permission.BLUETOOTH_ADMIN,
            Manifest.permission.BLUETOOTH_PRIVILEGED,
    };

    if(!hasPermissions(context, PERMISSIONS)){
        ActivityCompat.requestPermissions( activity, PERMISSIONS, PERMISSION_ALL);
    }
}

public static boolean hasPermissions(Context context, String... permissions) {
    if (context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}

希望能帮上忙

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

https://stackoverflow.com/questions/40862767

复制
相关文章

相似问题

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