Commit b11bf355 authored by 王雷's avatar 王雷

发布printer,keyboard新版本

parent d645ea5d
...@@ -37,7 +37,7 @@ repositories { ...@@ -37,7 +37,7 @@ repositories {
} }
group 'com.qmai.android.widget' group 'com.qmai.android.widget'
version '1.1.43-SNAPSHOT' version '1.1.44-SNAPSHOT'
gradlePublish { gradlePublish {
......
...@@ -77,7 +77,10 @@ class NumberKeyBoard : QmKeyboardView { ...@@ -77,7 +77,10 @@ class NumberKeyBoard : QmKeyboardView {
} }
override fun onKey(primaryCode: Int, keyCodes: IntArray?) { override fun onKey(primaryCode: Int, keyCodes: IntArray?) {
//判断没有初始化
if (!::editWidget.isInitialized) {
return
}
val editable = editWidget.editableText val editable = editWidget.editableText
when (primaryCode) { when (primaryCode) {
Code.CLEAR.code -> { Code.CLEAR.code -> {
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<application <application
android:name=".App" android:name=".App"
android:allowBackup="true" android:allowBackup="true"
......
...@@ -43,6 +43,8 @@ class MainActivityPtinter : AppCompatActivity(), PrintConnOrDisCallBack { ...@@ -43,6 +43,8 @@ class MainActivityPtinter : AppCompatActivity(), PrintConnOrDisCallBack {
setContentView(R.layout.activity_main_printer) setContentView(R.layout.activity_main_printer)
DeviceManagerUtils.getInstance().addConnectStatusCallBack(this) DeviceManagerUtils.getInstance().addConnectStatusCallBack(this)
initUsbPrinter() initUsbPrinter()
val value = Utils.getSN()
Log.d(TAG, "onCreate: value= $value")
tv_connect_bt.setOnClickListener { tv_connect_bt.setOnClickListener {
startActivity(Intent(this, BtListActivity::class.java)) startActivity(Intent(this, BtListActivity::class.java))
} }
......
package com.qimai.android.widget;
import android.os.Build;
import java.lang.reflect.Method;
/**
* <pre>
* author : leiwang
* e-mail : xxx@xx
* time : 2021/08/12
* desc :
* version: 1.0
* </pre>
*/
public class Utils {
/**
* 获取SN
* @return
*/
public static String getSN()
{
String serial = "";
//通过android.os获取sn号
try {
serial = android.os.Build.SERIAL;
if (!serial.equals("") && !serial.equals("unknown")) {
return serial;
}
} catch (Exception e) {
serial = "";
}
//通过反射获取sn号
try {
Class<?> c = Class . forName ("android.os.SystemProperties");
Method get = c . getMethod ("get", String.class);
serial = (String) get . invoke (c, "ro.serialno");
if (!serial.equals("") && !serial.equals("unknown")) return serial;
//9.0及以上无法获取到sn,此方法为补充,能够获取到多数高版本手机 sn
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) serial = Build.getSerial();
} catch (Exception e) {
serial = "";
}
return serial;
}
}
...@@ -51,7 +51,7 @@ repositories { ...@@ -51,7 +51,7 @@ repositories {
} }
group 'com.qmai.android.print' group 'com.qmai.android.print'
version '1.1.34-SNAPSHOT' version '1.1.38-SNAPSHOT'
gradlePublish { gradlePublish {
......
...@@ -34,6 +34,7 @@ class BlueDeviceManager(override var mType: Int = BT) : DeviceManager() { ...@@ -34,6 +34,7 @@ class BlueDeviceManager(override var mType: Int = BT) : DeviceManager() {
private var disposable: Disposable? = null private var disposable: Disposable? = null
private val uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")//蓝牙打印UUID private val uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")//蓝牙打印UUID
private var job: Job? = null private var job: Job? = null
@RequiresApi(Build.VERSION_CODES.KITKAT) @RequiresApi(Build.VERSION_CODES.KITKAT)
override fun openPort() { override fun openPort() {
mOnBtConnectCallBack?.onConnectStart() mOnBtConnectCallBack?.onConnectStart()
...@@ -57,10 +58,8 @@ class BlueDeviceManager(override var mType: Int = BT) : DeviceManager() { ...@@ -57,10 +58,8 @@ class BlueDeviceManager(override var mType: Int = BT) : DeviceManager() {
mBlueToothDevice?.let { it -> mBlueToothDevice?.let { it ->
//这里判断是否需要弹出密码输入弹窗 //这里判断是否需要弹出密码输入弹窗
var isVerify: Boolean = it.createBond() var isVerify: Boolean = it.createBond()
//如果不需要就直接去连接 //如果不需要就直接去连接 同时是未配对状态
if (!isVerify) { if (isVerify && (it.bondState != BluetoothDevice.BOND_BONDED)) {
connectBt(it)
} else {
//获取顶部Activity //获取顶部Activity
ActivityManagers.getInstance().getTopActivity()?.let { activity -> ActivityManagers.getInstance().getTopActivity()?.let { activity ->
//去广播中等待状态 //去广播中等待状态
...@@ -86,6 +85,8 @@ class BlueDeviceManager(override var mType: Int = BT) : DeviceManager() { ...@@ -86,6 +85,8 @@ class BlueDeviceManager(override var mType: Int = BT) : DeviceManager() {
} }
} }
} ?: mOnBtConnectCallBack?.onConnectError(ACTIVITY_NOT_FOUND, "获取不到Activity实例") } ?: mOnBtConnectCallBack?.onConnectError(ACTIVITY_NOT_FOUND, "获取不到Activity实例")
} else {
connectBt(it)
} }
//mOnBtConnectCallBack?.onConnectError(DEVICE_NOT_FIND, "根据地址获取不到设备") //mOnBtConnectCallBack?.onConnectError(DEVICE_NOT_FIND, "根据地址获取不到设备")
} }
...@@ -144,88 +145,67 @@ class BlueDeviceManager(override var mType: Int = BT) : DeviceManager() { ...@@ -144,88 +145,67 @@ class BlueDeviceManager(override var mType: Int = BT) : DeviceManager() {
* ***/ * ***/
private fun connectBt(it: BluetoothDevice) { private fun connectBt(it: BluetoothDevice) {
GlobalScope.launch(Dispatchers.Main) { GlobalScope.launch(Dispatchers.Main) {
mBluetoothSocket = getBtSocket(it) try {
if (mBluetoothSocket != null) { withContext(Dispatchers.IO) {
try { mBluetoothSocket = it.createRfcommSocketToServiceRecord(uuid)
withContext(Dispatchers.IO) { }
mBluetoothSocket!!.connect() if (mBluetoothSocket != null) {
} try {
mOutPutStream = mBluetoothSocket!!.outputStream withContext(Dispatchers.IO) {
mInPutStream = mBluetoothSocket!!.inputStream if (mBluetoothSocket!!.isConnected) {
//到这里说明配对并连接成功 判断打印机模式 mBluetoothSocket!!.close()
PrinterStatusUtils(this@BlueDeviceManager).apply { }
mPrintStatusCallBack = object : PrintStatusCallBack { mBluetoothSocket!!.connect()
override fun searchResult(status: Int?) { }
mPrintMode = status ?: ESC mOutPutStream = mBluetoothSocket!!.outputStream
mStatus = true mInPutStream = mBluetoothSocket!!.inputStream
// name = it.productName //到这里说明配对并连接成功 判断打印机模式
name = it.name PrinterStatusUtils(this@BlueDeviceManager).apply {
/* if (name.isNullOrEmpty()) { mPrintStatusCallBack = object : PrintStatusCallBack {
name = if (mPrintMode == ESC) "小票打印机" else "杯贴打印机" override fun searchResult(status: Int?) {
}*/ mPrintMode = status ?: ESC
DeviceManagerUtils.getInstance().addDevice(this@BlueDeviceManager) mStatus = true
mOnBtConnectCallBack?.onConnectSuccess(this@BlueDeviceManager) // name = it.productName
//mUsbPrintConnCallBack?.onConnSucess(this@UsbDeviceManager) name = it.name
/* if (name.isNullOrEmpty()) {
Log.d(TAG, "searchResult: status= $status") name = if (mPrintMode == ESC) "小票打印机" else "杯贴打印机"
/* status?.let { }*/
handleConnectSuccess(status) DeviceManagerUtils.getInstance()
} ?: handleUnknownStatus()*/ .addDevice(this@BlueDeviceManager)
mOnBtConnectCallBack?.onConnectSuccess(this@BlueDeviceManager)
//mUsbPrintConnCallBack?.onConnSucess(this@UsbDeviceManager)
Log.d(TAG, "searchResult: status= $status")
/* status?.let {
handleConnectSuccess(status)
} ?: handleUnknownStatus()*/
}
} }
queryStatus()
} }
queryStatus() } catch (e: IOException) {
Log.d(TAG, "connectBt: e= $e")
mOnBtConnectCallBack?.onConnectError(
PrintManagerUtils.SOCKET_ERROR,
"socket连接异常"
)
closePort()
mStatus = false
} }
} catch (e: IOException) { } else {
Log.d(TAG, "connectBt: e= $e")
mOnBtConnectCallBack?.onConnectError( mOnBtConnectCallBack?.onConnectError(
PrintManagerUtils.SOCKET_ERROR, PrintManagerUtils.SOCKET_NOT_FOUND,
"socket连接异常" "获取不到socket"
) )
closePort()
mStatus = false
} }
} else { } catch (e: Exception) {
mOnBtConnectCallBack?.onConnectError( mOnBtConnectCallBack?.onConnectError(
PrintManagerUtils.SOCKET_NOT_FOUND, PrintManagerUtils.SOCKET_ERROR,
"获取不到socket" "${e.message}"
) )
} }
} }
/* mBluetoothSocket = it.createRfcommSocketToServiceRecord(uuid)
mBluetoothSocket?.let {
try {
//发起连接
it.connect()
try {
mOutPutStream = it.outputStream
mInPutStream = it.inputStream
} catch (e: IOException) {
mOnBtConnectCallBack?.onConnectError(PrintManagerUtils.IO_ERROR, "获取流失败")
closePort()
mStatus = false
}
} catch (e: IOException) {
mOnBtConnectCallBack?.onConnectError(PrintManagerUtils.SOCKET_ERROR, "socket连接异常")
closePort()
mStatus = false
}
//到这里说明配对并连接成功 判断打印机模式
PrinterStatusUtils(this).apply {
mPrintStatusCallBack = object : PrintStatusCallBack {
override fun searchResult(status: Int?) {
Log.d(TAG, "searchResult: status= $status")
status?.let {
handleConnectSuccess(status)
} ?: handleUnknownStatus()
}
}
queryStatus()
}
} ?: mOnBtConnectCallBack?.onConnectError(PrintManagerUtils.SOCKET_NOT_FOUND, "获取不到socket")*/
} }
......
...@@ -263,9 +263,10 @@ class PrintManagerUtils { ...@@ -263,9 +263,10 @@ class PrintManagerUtils {
fun connectSunmiInnerBluePrint(onBtConnectCallBack: OnBtConnectCallBack? = null) { fun connectSunmiInnerBluePrint(onBtConnectCallBack: OnBtConnectCallBack? = null) {
val brand = Build.BRAND val brand = Build.BRAND
val model = Build.MODEL val model = Build.MODEL
Log.d(TAG, "connectSunmiInnerBluePrint: model= ${model}")
//商米品牌&&(T系列||D2s系列 D2mini)) //商米品牌&&(T系列||D2s系列 D2mini))
if (brand == "SUNMI" && if (brand == "SUNMI" &&
(model.contains("T2") || model.contains("T1") || model.contains("D2s") || model.contains( (model.contains("T2") ||model.contains("t2")|| model.contains("t1host") || model.contains("D2s") || model.contains(
"D2mini" "D2mini"
)) ))
) { ) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment