SkillAgentSearch skills...

BluetoothSelector

Android bluetooth selector, can be use to choose bluetooth device and invoke call-back function when the connection establish or destroy. 安卓蓝牙选择器,可以选择蓝牙设备,并在连接成功后或者连接断开后调用回调函数。

Install / Use

/learn @yzlee/BluetoothSelector
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

BluetoothSelector

蓝牙选择器


功能

  • 通过回调函数执行蓝牙连接成功后和断开后的动作
  • 支持多蓝牙设备同时连接
  • 集成读取数据的thread,可直接在回调函数中输入数据解析逻辑
  • 选择界面可显示已配对设备,也可以搜索设备
  • 可通过输入mac地址或者BluetoothDevice直接连接蓝牙
  • 可选择是否出现等待界面(方便后台连接)
  • 重连不重复开线程。
  • 连接失败后返回Exception e
  • 蓝牙选择界面、等待界面自定义(正在完善)

截图

| | | | | -------- | --------- | --------| | | | |

引用

Gradle:

compile 'cc.liyongzhi.bluetoothselector:bluetoothselector:1.9.1'

使用

若要在读取线程中实现复杂逻辑,则使用不集成读取线程的回调函数。若只是简单的逻辑,则可使用集成读取线程的回调函数,回调函数中只需根据返回的buffer和返回的buffer的size做相应逻辑实现即可。

不集成读取线程:
/**
 * @param context 上下文
 * @param bluetoothConnectCallback 连接建立和取消连接后调用的回调函数
 */
MedBluetooth.connectBluetooth(Context context, BluetoothConnectCallback bluetoothConnectCallback);

或者

/**
 * @param context 上下文
 * @param mac 如果以前有保存蓝牙mac地址,则可以直接输入
 * @param showConnectBluetoothActivity 是否显示等待界面,若后台有自动重连请设置为false,不然每次连接都转圈圈。。。
 * @param bluetoothConnectCallback 连接建立和取消连接后调用的回调函数
 */
MedBluetooth.connectBluetooth(Context context, String mac, Boolean showConnectBluetoothActivity, BluetoothConnectCallback bluetoothConnectCallback);

BluetoothConnectCallback有两个方法:

/**
 * 连接成功或失败后调用
 * @param socket 获得的socket
 * @param device 本次连接的设备,可存下来方便下次自动重连,就不用每次都选择了。
 * @param e 错误
 */
public abstract void connected(BluetoothSocket socket, BluetoothDevice device, Exception e);

/**
 * 连接断开后调用,原理为监听系统广播
 */
public abstract void disconnected();
集成读取线程:
/**
 * @param context 上下文
 * @param bluetoothConnectWithDataManageCallback 连接建立和取消连接后调用的回调函数,并在建立连接后开启读取线程,断开连接后结束读取线程。
 */
MedBluetooth.connectBluetooth(Context context, BluetoothConnectWithDataManageCallback bluetoothConnectWithDataManageCallback);

或者

/**
 * @param context 上下文
 * @param mac 如果以前有保存蓝牙mac地址,则可以直接输入
 * @param showConnectBluetoothActivity 是否显示等待界面,若后台有自动重连请设置为false,不然每次连接都转圈圈。。。
 * @param bluetoothConnectWithDataManageCallback 连接建立和取消连接后调用的回调函数,并在建立连接后开启读取线程,断开连接后结束读取线程。
 */
MedBluetooth.connectBluetooth(Context context, String mac, Boolean showConnectBluetoothActivity, BluetoothConnectWithDataManageCallback bluetoothConnectWithDataManageCallback);

BluetoothConnectWithDataManageCallback有三个方法:

/**
 * 处理读取到的数据的函数,后台会有一个循环读取,若没有错误产生且有数据,则每次读取会有一个buffer,以及buffer的大小bytes。
 * @param bytes 本次读取到的字节数
 * @param buffer 字节存到这个数组中
 * @param e 错误
 */
public abstract void dataMange(int bytes, byte[] buffer, Exception e);
/**
 * 连接成功或失败后调用
 * @param socket 获得的socket
 * @param device 本次连接的设备,可存下来方便下次自动重连,就不用每次都选择了。
 * @param e 错误
 */
public abstract void connected(BluetoothSocket socket, BluetoothDevice device, Exception e);

/**
 * 连接断开后调用,原理为监听系统广播
 */
public abstract void disconnected();

示例(不带读取数据线程,带读取线程请查看demo):

在需要连接蓝牙或者选择设备的地方加入代码,本例为位于OnClickListener里。

  • 输入为ContextBluetoothConnectCallback时:
mButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //以下为调用本库,输入为Context、BluetoothConnectCallback
        MedBluetooth.connectBluetooth(mContext, new BluetoothConnectCallback() {
            @Override
            // 连接成功或失败后调用。
            public void connected(BluetoothSocket socket, BluetoothDevice device, Exception e) {
                if (e != null) {
                    //连接失败
                } else {
                    //输出为获得的socket,可以自行存到全局变量里进行数据输入输出操作。
                    //device为本次连接的设备,可调用 device.getAddress() 获得mac地址。
                    //e 为错误。
                }
            }
            @Override
            // 连接断开后调用
            public void disconnected() {
                // 原理为通过捕获系统的广播而调用的。
            }
        });
        //调用结束
    }
});
  • 输入还可以为ContextString(mac地址)Boolean(是否显示等待界面)BluetoothConnectCallback,可以用于重连,代码几乎同上。

更新历史

2016.9.13 version 1.10.0

添加断开连接函数

2016.9.3 version 1.9.3

蓝牙连接与断开时发送广播,包涵状态发生改变设备的mac地址。

2016.8.23 version 1.9.1

更新gradle引用

2016.6.3 version 1.9

集成读取数据的thread

2016.6.1 version 1.8

修复可能的线程运行完后又被start问题。

2016.5.31 version 1.7

可用版本。

Bug

作者

微博:这是一条特立独行的猪 http://weibo.com/1881962417/ 欢迎关注!

View on GitHub
GitHub Stars8
CategoryDevelopment
Updated1mo ago
Forks1

Languages

Java

Security Score

85/100

Audited on Feb 26, 2026

No findings