Android蓝牙连接与通讯-第一部分:蓝牙扫描

首先要实现一个扫描周围蓝牙设备并显示的功能,显示功能比较适合的控件是ListView,然后通过点击触发与蓝牙设备的连接,链接后就可以进行具体的通讯操作。

使用以及扫描蓝牙设备需要声明权限:

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

其中的android.permission.ACCESS_FINE_LOCATION在Android6.0以上系统中运行时,需要运行时权限处理。

蓝牙扫描关键类:BluetoothAdapter
这个类的实例可以通过BluetoothAdapter.getDefaultAdapter();代码获取,如果返回值为null,就代表设备不支持蓝牙。

private final BluetoothAdapter DEFAULT_ADAPTER = BluetoothAdapter.getDefaultAdapter();

获得实例后,可以通过调用它的方法启动扫描或提前结束扫描,开启关闭蓝牙等操作。
先判断是否支持蓝牙:

        if (null == bluetoothAdapter) { // 返回null表示设备不支持蓝牙
            Toast.makeText(this, "蓝牙初始化失败", Toast.LENGTH_SHORT).show();
            return;
        }
        // 检测蓝牙是否打开,未打开则申请打开
        if (!bluetoothAdapter.isEnabled()) {
            Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(intent, REQUEST_ENABLE_BT);
        }

这里为了回调用户是否同意打开蓝牙,所以使用了startActivityForResult方法,如果只是申请打开蓝牙,也可以使用BluetoothAdapter自带的开启蓝牙的方法

        bluetoothAdapter.enable();

发现设备:

        // 开始扫描,一般持续12秒左右,会占用BluetoothAdapter的大量资源
        // 所以一定要在再次使用BluetoothAdapter前先将扫描停止
        bluetoothAdapter.startDiscovery();

这是一个异步调用,启动后手机会自动扫描周围的蓝牙设备,当检测到一个蓝牙设备时,安卓会发出一个广播,这个广播中携带了设备信息,所以我们还需要注册一个广播接收器来进行监听。

		// 注册广播接收器
        IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
        BroadcastReceiver BT_RECEIVER = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // 获取新增的设备信息对象
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                // 获取名称和地址
                String s = "新设备名称:" + device.getName() +
                        "\n设备MAC:" + device.getAddress();
                // 下面可以进行个性化的逻辑处理...
                
            }
        };
        registerReceiver(BT_RECEIVER, intentFilter);

这样,我们就可以获取到周围的蓝牙设备对象了。这点代码只为演示功能,所以尽量简洁。
实际使用时,可以设置当接收到广播后将设备信息添加到ListView进行显示,并在ListView的点击事件中进行连接操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值