Android开发蓝牙篇之蓝牙配对、连接与接收数据

首先是此部分涉及到的类

  • BluetoothAdapter 蓝牙适配器,即该类里面包含了蓝牙使用中常用到的一些API。
  • BroadcastReceiver 广播接收者,不难猜测,蓝牙设备开启或者关闭、搜索到周边设备就要来通知应用,那么Android系统就会以广播的方式来通知。
  • BluetoothDevice 蓝牙设备,即一个相当于蓝牙设备的类,实现了Parcelable接口,用于Android的IPC通信机制。里面实在广播时发送的蓝牙的相关信息:蓝牙名称,地址,类型和uuid等。

蓝牙配对操作

public void makePair(Context context, String address,
            MakePariBlueToothListener mMakePariListener) throws Exception {
        this.mMakePariListener = mMakePariListener;
        this.context = context;
        IntentFilter iFilter = new IntentFilter(
                BluetoothDevice.ACTION_BOND_STATE_CHANGED);
        context.registerReceiver(mSearchReceiver, iFilter);

        enableBlueTooth();
        BluetoothDevice device = BTadapter.getRemoteDevice(address);

        device.createBond();
    }

在蓝牙配对过程中,设备会以广播的方式告知应用配对的过程和结果如:配对开始、配对成功与失败、配对结束等,所以这里创建一个MakePariBlueToothListener 的配对监听器的接口,在配对的广播中调用监听器的各个结果由用户处理配对结果。所以要传递一个配对监听器的对象,还有注册广播接收者。
之后依据对方蓝牙地址,获取蓝牙设备对象BluetoothDevice,调用Android的api的device.createBond()方法开始蓝牙配对,之后再以广播的方式获取到配对结果。

public interface MakePariBlueToothListener {

    public void whilePari(BluetoothDevice device);

    public void pairingSuccess(BluetoothDevice device);

    public void cancelPari(BluetoothDevice device);
}

在开始配对后调用whilePari( )方法,并将配对的蓝牙设备对象返回给调用者。
在配对成功后调用pairingSuccess( )方法,也将配对的蓝牙设备对象返回给调用者。
在配对失败或者取消后调用cancelPari( )方法,也将配对的蓝牙设备对象返回给调用者。

广播接收者的处理:

private BroadcastReceiver mSearchReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context arg0, Intent arg1) {
            // TODO Auto-generated method stub
            String action = arg1.getAction();
            switch (action) {
            case BluetoothDevice.ACTION_BOND_STATE_CHANGED:
                device = arg1.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                switch (device.getBondState()) {
                case BluetoothDevice.BOND_BONDING:// 正在配对
                    mMakePariListener.whilePari(device);
                    break;
                case BluetoothDevice.BOND_BONDED:// 配对结束
                    mMakePariListener.pairingSuccess(device);
                    break;
                case BluetoothDevice.BOND_NONE:// 取消配对/未配对
                    mMakePariListener.cancelPari(device);
                default:
                    break;
                }
                break;
            }
        }
    };

在广播接收者中,接收到ACTION_BOND_STATE_CHANGED的广播时,说明配对时蓝牙设备的关系状态发生改变,依据改变的状态,调用之前的蓝牙配对监听器的不同方法。
在收到BOND_BONDING的状态时说明开始配对了,就调用监听器的whilePari( )方法。
接收到BOND_BONDED的状态时说明已经配对了,并且配对成功了,就可以调用监听器的pairingSuccess( )方法。
接收到BOND_NONE就表示配对失败了,或者是配对取消了,就可以调用监听器的cancelPari( )方法。
统一由用户做出不同的相应操作。

蓝牙连接与接收数据操作

public BluetoothSocket getBluetoothSocket(String address)
            throws IOException {
        BluetoothDevice device = BTadapter.getRemoteDevice(address);
        BluetoothSocket socket = device.createRfcommSocketToServiceRecord(UUID
                .fromString(BlueTooth.MY_UUID));
        return socket;
    }

首先依据对方的蓝牙地址获取蓝牙设备对象,再从蓝牙设备对象中获取设备连接的Socket,而UUID是由Android设备统一的蓝牙的通用唯一识别码 ,获取到socket后就可以直接在socket中得到对应的输入流和输出流了

socket.connect();
InputStream is = socket.getInputStream();

这里就是先通过socket建立连接后,获取一个输入流的对象,之后就流的操作了,也不再多说了。

下面贴出整合蓝牙操作的Java源代码:
码云链接:https://gitee.com/D_inasour/codes/8c5yt4nd2xb9uzml10h7e16
csdn资源链接:http://download.csdn.net/download/d_inosaur/9946750

欢迎入门学习交流,系统收费0.1,勿在意:
欢迎入门学习交流,系统收费0.1,勿在意

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值