1.引言
最近做过用手机连接蓝牙打印机的小功能,第一次接触蓝牙方面的东西。觉得有一些套路可以记下来为以后蓝牙开发做准备。android 4.2 连接蓝牙打印机。
2.正题
基础知识:
BluetoothAdapter:BluetoothAdapter是所有蓝牙交互的入口。使用这个类,你能够发现其他的蓝牙设备,查询已配对设备的列表。
BluetoothChatService:用来与蓝牙设备建立连接用的,发送信息的类。
BluetoothDevice :代表一个远程的蓝牙设备。使用这个类查询诸如名称、地址、类和配对状态等设备信息来请求跟远程设备的连接。
BluetoothSocket
代表蓝牙socket的接口(类似TCP的Socket)。这是允许一个应用程序跟另一个蓝牙设备通过输入流和输出流进行数据交换的连接点。
BluetoothServerSocket
代表一个打开的监听传入请求的服务接口(类似于TCP的ServerSocket)。为了连接两个Android设备,一个设备必须用这个类打开一个服务接口。当远程蓝牙设备请求跟本设备建立连接请求时,BluetoothServerSocket会在连接被接收时返回一个被连接的BluetoothSocket对象。
2.1 权限
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
2.2 判断蓝牙是否打开
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
//蓝牙不可用,弹出提示框
} else {
//假如蓝牙没有被打开,开启打开蓝牙操作
if (!mBluetoothAdapter.isEnabled()) {
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
} else {
setupChat();//初始化BluetoothDevice
}
}
2.3 初始化BluetoothDevice ,找到绑定过的蓝牙设备,建立连接
mChatService = new BluetoothChatService(this, mHandler);
// Initialize the buffer for outgoing messages
mOutStringBuffer = new StringBuffer("");
/*扫描蓝牙配对的和没有配对的*/
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();//后期待测
// If there are paired devices, add each one to the ArrayAdapter
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
if (device.getName().equals("TP PHD32")) {
if (pair(device.getAddress(), "0000")) {
mChatService.connect(remoteDevice);
dialog = new MaterialDialog.Builder(PrintActivity.this)
.title("提示:")
.content("正在配对,请稍等....")
.autoDismiss(true)
.show();
}
}
}
} else {
DialogUtil.showTips(PrintActivity.this, "请检查蓝牙打印机是否打开");
}
}
2.4 写入数据(串口提供的方法)
/**
* Sends data with bluetooth.
*
* @param message A string of text to send.
*/
private void sendMessage(final String message) {
// Check that we're actually connected before trying anything
if (mChatService.getState() != BluetoothChatService.STATE_CONNECTED) {
Toast.makeText(this, "没有可连接设备", Toast.LENGTH_SHORT).show();
return;
}
new Thread() {
@Override
public void run() {
if (message.length() > 0) {
// Get the message bytes and tell the BluetoothChatService to write
byte[] send = message.getBytes(); //发送给本地文字框的数据缓冲区
byte[] buffer = message.substring(message.length() / 2).getBytes(); //发送给对端蓝牙设备的数据缓冲区
byte temp = 0; //转换十六进制的临时变量
Boolean unite = false; //转换十六进制的临时变量
for (int j = 0; j < message.length() / 2; j++) //初始化发送缓冲区
buffer[j] = 0;
try {
buffer = message.getBytes("GB2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
mChatService.write(buffer, send);
}
}
;
}.start();
}
总体的步骤:
1.检查蓝牙是否打开
2.初始化BluetoothChatService,遍历帮顶过的设备,与设备连接起来
3.连接成功之后就开始发送数据。
注意:俩个设备配对成功,不代表俩个设备连接成功了。配对成功才能通过getBondedDevices