安卓蓝牙低功耗(博美)昂莱斯坎



我正在尝试在Android中做一个BLE应用程序,但我无法弄清楚为什么没有调用onLeScan()函数。

private void scanLeDevice(final boolean enable) {
   Log.d(Tag,"in scanLeDevice");
    if (enable) {
        // Stops scanning after a pre-defined scan period.
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mScanning = false;
                mBluetoothAdapter.stopLeScan(mLeScanCallback);
                invalidateOptionsMenu();
            }
        }, SCAN_PERIOD);
        Log.d(Tag,"Scanning Done");
        mScanning = true;
        mBluetoothAdapter.startLeScan(mLeScanCallback);
    } else {
        mScanning = false;
        mBluetoothAdapter.stopLeScan(mLeScanCallback);
    }
    invalidateOptionsMenu();
}

// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
        Log.e(Tag,"Scan device rssi is " + rssi);
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mLeDeviceListAdapter.addDevice(device);
                mLeDeviceListAdapter.notifyDataSetChanged();
            }
        });
    }
};

日志猫:

 01-22 15:34:02.449:     D/MainActivity(32531):      in scanLeDevice    
    01-22 15:34:02.449:     D/MainActivity(32531):      Scanning Done
    01-22 15:34:02.449:     D/BluetoothAdapter(32531):  startLeScan(): null
    01-22 15:34:02.453:     D/BluetoothAdapter(32531):  onClientRegistered() - status=0 clientIf=5
    01-22 15:34:09.005:     D/MainActivity(32531):      in scanLeDevice
    01-22 15:34:09.005:     D/BluetoothAdapter(32531):  stopLeScan()

检查您的AndroidManifest.xml文件中是否有以下内容:

<service android:name=".bluetooth.BluetoothLeService" android:enabled="true" />

此外,您应该通过以下方式初始化蓝牙适配器BluetoothManager

if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
    Toast.makeText(mContext, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
    return false;
}
// Initializes a Bluetooth adapter.  For API level 18 and above, get a reference to
// BluetoothAdapter through BluetoothManager.
final BluetoothManager bluetoothManager =
        (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
您需要

在 AndroidManifest 中同时拥有以下两个权限.xml才能扫描设备:

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

最新更新