【Raspberry Pi 3 开发板 试用体验】AndroidThings BLE搜索

  • bluebanboom
  • LV4工程师
  • |      2017-09-24 20:32:50
  • 浏览量 1115
  • 回复:1
本帖最后由 bluebanboom 于 2017-9-24 20:34 编辑 树莓3带有蓝牙芯片,AndroidThings本身也支持蓝牙,之前研究了不少BLE板子,这次在AndroidThings上再来看看如何使用蓝牙。由于对安卓不是很熟,所以一步一步的来吧,先实现一个简单的BLE设备搜索功能。 AndroidThings就是安卓,在之前的试用中已经提及了。因为AndroidThings是基于最新的Android O,API有一些变化,但大致还是差不多的。 1.检查设备是否支持蓝牙 虽然rpi3肯定支持了,但是还是按部就班的来检查一下吧,使用如下代码检查:
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {

    Toast.makeText(this, "do not support ble",Toast.LENGTH_SHORT).show();

    Log.i(TAG, "onCreate: do not support ble");

}
2.获取BluetoothAdapter及BluetoothLeScanner Adapter是安卓里一个重要的概念,我们是需要通过BluetoothAdapter来进行蓝牙操作的,因为这次主要研究蓝牙设备扫描,所以主要是用BluetoothLeScanner。
final BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

mBluetoothAdapter = bluetoothManager.getAdapter();



if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {

    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

    startActivityForResult(enableBtIntent, 11);

}



mLeScanner = mBluetoothAdapter.getBluetoothLeScanner();
3.ScanCallback处理扫描结果
mLeScanCallback = new ScanCallback() {

    @Override

    public void onScanResult(int callbackType, ScanResult result) {

         super.onScanResult(callbackType, result);

         BluetoothDevice dev = result.getDevice();

         if (dev != null) {

             addToDeviceList(dev);

         }

     }



     @Override

     public void onBatchScanResults(List results) {

         super.onBatchScanResults(results);

         for (ScanResult result : results) {

             BluetoothDevice dev = result.getDevice();

             if (dev != null) {

                 addToDeviceList(dev);

             }

         }

     }



     @Override

     public void onScanFailed(int errorCode) {

         super.onScanFailed(errorCode);

         Log.i(TAG, "onBatchScanResults: " + "failed");

     }

 };
4.获取权限 因为要使用蓝牙所以需要在manifest中增加一下几个权限:






 5.开始扫描

private void scanLeDevice(final boolean enable) {

    if (enable) {

        // Stops scanning after a pre-defined scan period.

        mHandler.postDelayed(new Runnable() {

            @Override

            public void run() {

                mScanning = false;

                mLeScanner.stopScan(mLeScanCallback);

            }

        }, SCAN_PERIOD);



        mScanning = true;

        mLeScanner.startScan(mLeScanCallback);

    } else {

        mScanning = false;

        mLeScanner.stopScan(mLeScanCallback);

    }

}
还是拿小钢炮来测试一下扫描结果,如下所示:
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
lygo 2017-09-27
有点高级 看不懂
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子

上海固越电子科技有限公司 版权所有©       投诉、举报邮箱:contact@icxbk.com       客服、投诉、举报电话:021-31029100-9104

经营增值电信业务试点批复:沪通信管自贸[2019]24号 出版物经营许可证:新出发沪批字第Y8445号

沪ICP备18038102号  沪公网安备 31011702004806号 |营业执照