簡體   English   中英

Android低功耗藍牙(BLE)onlescan

[英]android Bluetooth low energy(BLE) onlescan

我正在嘗試在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();
            }
        });
    }
};

logcat的:

 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"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM