有关蓝牙的小心得

作为一个在公司才开始码代码的小菜鸟,前阵子,公司需求蓝牙打印功能,无力吐槽第一次就对接的针式打印机。

然后在网上搜了不少资料。发现也没有太直接相关我这一块的,所以颇费脑子,废话少说,直接贴代码

第一块肯定就是蓝牙了,公司不知道从哪里卖了一个蓝牙设备一个转接头,貌似还不错,这让我有点头绪。

蓝牙对接:

// 判断蓝牙是否打开如果没有打开自动打开蓝牙
private void isOpen() {
Log.e("tag", "--------2222----------");
if (isOpen1()) {
// 蓝牙关闭的情况
System.out.println("蓝牙关闭的情况");
openBluetooth(context);
// 判断是否与大打印机蓝牙配对成功
idLink();
} else {
// Toast.makeText(context, "请先连接蓝牙", Toast.LENGTH_SHORT).show();
openBluetooth(context);
}
}


private void idLink() {


// 得到所有已配对的蓝牙适配器对象
Set<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices();
Log.w("msg", "[配对成功的蓝牙数量]" + devices.size());
if (devices.size() > 0) {
boolean isL = false;
String adress = "";
for (Iterator<BluetoothDevice> iterator = devices.iterator(); iterator
.hasNext();) {
BluetoothDevice bluetoothDevice = (BluetoothDevice) iterator
.next();
Log.e("tag", "--------3333----------");
// 得到远程已配对蓝牙设备的mac地址
adress = bluetoothDevice.getAddress();
Log.e("msg", adress + "[获取到的蓝牙mac地址]");
// 与打印机的mac地址判断
String adre = takeAdress();
if (adre.equals("")) {
Toast.makeText(context, "请先绑定MCA地址", Toast.LENGTH_SHORT)
.show();
loading.dismiss();
return;
}
if (adre.equals(adress)) {
isL = true;
}
}
if (isL == true) {
initLink(adress);
} else {
Toast.makeText(context, "请先与蓝牙配对", Toast.LENGTH_SHORT).show();
loading.dismiss();
Log.e("msg", isL + "isL]");
}


} else {
Toast.makeText(context, "请先与蓝牙配对", Toast.LENGTH_SHORT).show();
loading.dismiss();
}
}


/**
* 判断蓝牙是否打开

* @return boolean
*/
public boolean isOpen1() {
return bluetoothAdapter.isEnabled();


}


/**
* 打开蓝牙
*/
public void openBluetooth(Activity activity) {
Intent enableBtIntent = new Intent(
BluetoothAdapter.ACTION_REQUEST_ENABLE);
activity.startActivityForResult(enableBtIntent, 1);


}


// 与打印机建立联传输链接
private void initLink(String adress) {
device = bluetoothAdapter.getRemoteDevice(adress);
try {
bluetoothSocket = this.device
.createRfcommSocketToServiceRecord(uuid);
bluetoothSocket.connect();
outputStream = bluetoothSocket.getOutputStream();
// 想打印机发送字节流
send();
} catch (IOException e) {
Toast.makeText(context, "链接失败", Toast.LENGTH_SHORT).show();
loading.dismiss();
e.printStackTrace();
}
}

第二块:

打印机传输流我是做大打印单据,这一块真是一点一代你测得,也是不说废话贴代码。

byte[] start = { 0x1c, 0x76, 0x31 };开始打印并且将制表符连线

制表,说来惭愧,我这个办法很菜,没有办法的情况下再考虑。

使用制表符┌  ─ ┼ ┴  └ ┬ ─┐ │

我是用制表符生生画出来的。

扫描二维码关注公众号,回复: 2980897 查看本文章

最后换纸

byte[] end = { 0x0c };// 换纸

还有一些命令

//字体四倍距
byte[] beiju = {0x1C, 0x57, 0x01};
//取消字体四倍距
byte[] disbeiju = {0x1C, 0x57, 0x00};
// //字体加粗
// byte[] jiacu = {0x1b,0x45};
// //取消字体加粗
// byte[] disjiacu = {0x1b,0x46};

不知道大家有没有发现这些都是byte数据的形式发送给打印机的,

文字方面一定要通过这个命令处理才能发送给打印机

byte[] dianpu = pringongsi.getBytes("GB2312");

然后就是可以给大家分享一个我写的一个拼接的byte数组的一个小方法

// 拼装字符串
private String mosaic(int lenght, String oldstr, String newstr) {
String str = "";
if (newstr.length()>oldstr.length()) {
str = newstr.substring(0,oldstr.length() );
}else {
str = newstr  + oldstr.substring(lenght, oldstr.length());
}
return str;
}

大概就是这样,第一次写博客,废话太多,条理也不是太清楚,大家谅解。

也是整理了好多开始的经验,以后会整理的好点再往上面传的

猜你喜欢

转载自blog.csdn.net/jia_you1/article/details/77282433
今日推荐