Files
pda-web/app/src/main/java/chaoran/business/engine/BlueToothWrapperEngine.java

136 lines
4.3 KiB
Java
Raw Normal View History

2021-02-20 13:58:47 +08:00
package chaoran.business.engine;
/*
**********************************************
* DATE PERSON REASON
* 2021-02-19 FXY Created
**********************************************
*/
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.content.SharedPreferences;
import android.widget.Toast;
import chaoran.business.engine.entity.BlueToothSetting;
import chaoran.business.engine.entity.Setting;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;
public abstract class BlueToothWrapperEngine implements PrintEngine {
//打印驱动标志
protected static final int PRINT_TYPE = 1664;
//蓝牙标识
private UUID uuid;
//上下文
private Context context;
//蓝牙适配器
protected BluetoothAdapter bluetoothAdapter;
//蓝牙socket对象
private BluetoothSocket bluetoothSocket;
//开启蓝牙且连接设备
public abstract void startThenConnect();
//关闭蓝牙
public abstract void close();
//获取绑定的设备
public abstract BluetoothDevice getBoundDevice();
public BlueToothWrapperEngine(Context context) {
this.context = context;
this.bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
this.uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
}
//蓝牙打印机打印操作
@Override
public void print(File file) {
BluetoothDevice boundDevice = getBoundDevice();
//先获取连接上的设备继续操作
if (null == boundDevice) {
Toast.makeText(context, "蓝牙未连接设备或者连接的设备不是打印机", Toast.LENGTH_LONG).show();
return;
}
new PrintThread(boundDevice, file).start();
}
@Override
public Setting getSetting() {
SharedPreferences sharedPreferences = context.getSharedPreferences("BlueToothEngine", Context.MODE_PRIVATE);
String name = sharedPreferences.getString("name", "");
String address = sharedPreferences.getString("address", "");
return new BlueToothSetting(name, address);
}
@Override
public boolean saveSetting(Setting s) {
BlueToothSetting blueToothSetting = (BlueToothSetting) s;
SharedPreferences sharedPreferences = context.getSharedPreferences("BlueToothEngine", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.putString("name", blueToothSetting.getName());
edit.putString("address", blueToothSetting.getAddress());
edit.commit();
return true;
}
/**
* 连接为客户端
*/
private class PrintThread extends Thread {
private File file;
public PrintThread(BluetoothDevice device, File file) {
this.file = file;
try {
bluetoothSocket = device.createRfcommSocketToServiceRecord(uuid);
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
//取消的发现,因为它将减缓连接
bluetoothAdapter.cancelDiscovery();
OutputStream outputStream = null;
FileInputStream fileInputStream = null;
try {
//连接socket
bluetoothSocket.connect();
//连接成功获取输出流
outputStream = bluetoothSocket.getOutputStream();
fileInputStream = new FileInputStream(file);
byte[] data = new byte[1024];
int number;
while ((number = fileInputStream.read(data)) != -1) {
outputStream.write(data, 0, number);
outputStream.flush();
}
fileInputStream.close();
outputStream.close();
} catch (Exception connectException) {
try {
fileInputStream.close();
outputStream.close();
bluetoothSocket.close();
} catch (Exception closeException) {
closeException.printStackTrace();
}
}
}
}
}