Android蓝牙开发系列之搜索蓝牙设备

关键一步

在开发蓝牙的第一步就是需要在manifest.xml文件中添加蓝牙的访问权限

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

第一行代码表示的是,允许程序连接到已配对的蓝牙设备,即允许使用蓝牙
第二行代码表示的是,允许程序发现和配对蓝牙设备,即允许管理蓝牙
添加了这两行代码就可以在蓝牙的世界了“肆无忌惮”了。

第一步 打开蓝牙设备

要搜索周围的蓝牙设备,就要先打开本身设备的蓝牙设备,执行打开蓝牙操作之前,先判断自身设备是否支持蓝牙,(判断的真多,程序员就是这么的无奈,哈哈哈)首先要实例化一个蓝牙适配器对象如下:

BluetoothAdapter bTAdatper = BluetoothAdapter.getDefaultAdapter();

查看是否支持蓝牙,若不支持,则输出当前设备不支持蓝牙,代码如下

if(bTAdatper==null){
            Toast.makeText(this,"当前设备不支持蓝牙能",Toast.LENGTH_SHORT).show();
            }

如果支持在判断蓝牙是否打开,没有打开的情况下,再打开蓝牙。有两种方法打开

bTAdatper.isEnabled()

以及

Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(intent)

两种方法的区别在于第二种方法会弹出提示框询问用户是否打开蓝牙,前者会直接打开。
接下来可以设置自身的蓝牙可以被检测,以下代码即实现此功能

if (bTAdatper.getScanMode() != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
          Intent intent  = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
            //可以设置为150秒内可见
          intent .putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,150);
          startActivity(intent );
        }

第二步 搜索蓝牙设备

这步骤的代码非常简单:

bTAdatper.startDiscovery();
bTAdatper.cancelDiscovery()

搜索蓝牙设备,此过程是异步的,通过下面注册广播接收者,可以监听是否搜到设备。

        IntentFilter filter = new IntentFilter();  //设置广播信息过滤,即广播的类型
        filter.addAction(BluetoothDevice.ACTION_FOUND);//发现远程设备
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);//本地蓝牙适配器已经开始对远程设备的搜索过程
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//本地蓝牙适配器已近完成设备的搜索过程
        registerReceiver(mReceiver, filter); / //调用registerReceiver()方法
    }

系统发出了这些状态,就要来获取这些状态,通过广播接收者查看扫描到的蓝牙设备,每扫描到一个设备,系统都会发送此广播(BluetoothDevice.ACTION_FOUNDE)。其中参数intent可以获取蓝牙设备BluetoothDevice。

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
                //通过Parcelable接口来实现Intent传递对象,首先要进行实例化
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

                /**
                 * //避免重复添加已经绑定过的设备
                 * getBondState()获取远设备的连接状态,BOND_BONDED表示远程设备已经被匹配
                 */
                if (device.getBondState() != BluetoothDevice.BOND_BONDED)
                {
                    adapter.add(device);
                    adapter.notifyDataSetChanged();
                }
            } else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
                Toast.makeText(MainActivity.this, "开始搜索", Toast.LENGTH_SHORT).show();
            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
                Toast.makeText(MainActivity.this, "搜索完毕", Toast.LENGTH_SHORT).show();
            }
        }
    };

将搜索到的设备添加到列表中进行展示。蓝牙在搜索过程中会搜到已经配对过的蓝牙设备,所以可以获取之前已经配对过的蓝牙设备:

Set<BluetoothDevice> Devices = bTAdatper.getBondedDevices();
        if (pairedDevices.size() > 0) {
            for (BluetoothDevice device : pairedDevices) {
              list.add(device);
            }
        }

至此 蓝牙实现搜索功能

本系列文章着重感谢小牛哥的系列博文:

https://blog.csdn.net/a1533588867/article/category/6402830

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值