[AS3.0.1]蓝牙的基本使用,搜索和配对

蓝牙的最基本的用法,搜索和配对!
首先看下效果如下
效果


开启蓝牙

开启蓝牙需要注册清单文件,初始化蓝牙适配器,添加广播监听,最后才是正式开启蓝牙。

清单文件加权限
    <!-- 蓝牙权限 -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

5.0以上的版本需要加入gps权限

    <!-- 5.0之后蓝牙需要获取gps权限 -->
    <uses-feature android:name="android.hardware.location.gps" />

6.0以上的版本需要手动申请定位权限

    <!-- 6.0之后蓝牙需要位置权限 记得用6.0后的权限访问 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

注:6.0加入权限之后记得手动获取权限!不然蓝牙功能无法正常使用

初始化蓝牙(BluetoothAdapter)

初始化相当简单直接调用getDefaultAdapter方法就可以了

        //初始化蓝牙
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (bluetoothAdapter == null) {
            Toast.makeText(this, "设备不存在蓝牙", Toast.LENGTH_SHORT).show();
            return;
        }

初始化之后就可以用BluetoothAdapter对象进行对蓝牙的操作


BluetoothAdapter常用方法表格如下

方法 说明
getDefaultAdapter 默认本地适配器,如果此硬件平台不支持蓝牙,则为空。
isEnabled 如果蓝牙当前已启用并准备好使用,则返回true。
getState 获取本地蓝牙适配器的当前状态。STATE_OFF(关闭)、STATE_TURNING_ON(正在打开)、STATE_ON(开启)、STATE_TURNING_OFF(正在关闭)
enable 强制开启蓝牙
disable 强制关闭蓝牙
disable(boolean persist) 强制关闭蓝牙,是否保留设置。
getAddress 获取蓝牙地址
getName 获取蓝牙名字
factoryReset 出厂重置蓝牙
setName(String name) 设置蓝牙名字
getScanMode 获取蓝牙的扫描模式,扫描模式确定是否可以连接或被发现。SCAN_MODE_NONE(蓝牙未开启)、SCAN_MODE_CONNECTABLE(不可见)、SCAN_MODE_CONNECTABLE_DISCOVERABLE(可见)
setScanMode(@ScanMode int mode, int duration) (需要使用反射)设置蓝牙的扫描模式,单独的setScanMode(int mode)改变状态设置默认蓝牙可见时间
getDiscoverableTimeout、setDiscoverableTimeout(int timeout) (需要使用反射)获取和设置默认蓝牙可见时间
startDiscovery 开始扫描其他蓝牙
cancelDiscovery 取消扫描
isDiscovering 是否在扫描中
getBondedDevices 获取已绑定蓝牙
getConnectionState 获取蓝牙连接状态。STATE_CONNECTED(已连接)、STATE_DISCONNECTED(未连接)、STATE_CONNECTING(连接中)
添加广播

初始化之后就需要监听蓝牙的广播,不然无法获取搜索到了蓝牙设备

        //绑定广播
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothDevice.ACTION_FOUND);//找到设备的广播
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);//搜索完成的广播
        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);//蓝牙状态改变的广播
        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);//开始扫描的广播
        filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);//配对状态改变
        registerReceiver(mReceiver, filter);


    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
//            Log.e("-s-", "action = " + action);
            switch (action) {
                //蓝牙状态改变
                case BluetoothAdapter.ACTION_STATE_CHANGED:
                    Log.e("-s-", "蓝牙状态改变");
                    checkBluetooth();
                    break;
                //开始扫描
                case BluetoothAdapter.ACTION_DISCOVERY_STARTED:
                    Log.e("-s-", "开始扫描蓝牙");
                    allAdapter.clear();
                    changeText("开始扫描蓝牙");
                    showToast("开始扫描蓝牙");
                    break;
                //搜索完成
                case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
                    Log.e("-s-", "搜索完成");
                    changeText("搜索完成");
                    showToast("搜索完成");
                    break;
                //找到设备
                case BluetoothDevice.ACTION_FOUND:
                    Log.e("-s-", "找到设备");
                    changeText("搜索中...");
                    printDevice(bluetoothDevice);
                    allAdapter.add(bluetoothDevice);
                    break;
                //配对状态改变
                case BluetoothDevice.ACTION_BOND_STATE_CHANGED:
                    Log.e("-s-", "配对状态改变");
                    if (bluetoothDevice.getBondState() == BluetoothDevice.BOND_BONDING) {
                        changeText(bluetoothDevice.getName() + " 配对中");
                        Log.e("-s-", "配对中");
                    } else if (bluetoothDevice.getBondState() == BluetoothDevice.BOND_BONDED) {
                        changeText(bluetoothDevice.getName() + " 已配对成功");
                        Log.e("-s-", "已配对成功");
                    } else {
                        changeText(bluetoothDevice.getName() + " 已取消配对");
                        Log.e("-s-", "已取消配对");
                    }
                    printDevice(bluetoothDevice);
                    updataBonds();
                    break;
                default:
            }
        }
    };

以上代码有常用的几个蓝牙相关的广播,这边主要讲下另一个比较需要注意的APIBluetoothDevice

以下表格是常用的BluetoothDevice方法

方法 说明
getAddress 获取蓝牙设备的地址
getName 获取蓝牙设备的名称(可能会空)
get
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值