158 lines
4.5 KiB
Markdown
158 lines
4.5 KiB
Markdown
# PDA 打印机测试应用
|
|
|
|
这是一个用于测试内置 PDA 终端打印机的 Android 应用,通过 `android.bld.PrintManager` 系统服务进行打印控制。
|
|
|
|
## 功能特性
|
|
|
|
### 连接控制
|
|
- **绑定服务**:连接到系统的打印服务
|
|
- **初始化打印机**:初始化打印设备
|
|
- **关闭打印机**:释放打印设备
|
|
- **解绑服务**:断开打印服务连接
|
|
|
|
### 基础打印
|
|
- **快速打印测试**:一键完成初始化→打印→提交→关闭的完整流程
|
|
- **printText**:标准文本打印方法
|
|
- **printText2**:增强文本打印方法
|
|
- **start()**:提交打印队列,开始实际出纸
|
|
|
|
### 样式设置
|
|
- **字体大小**:调整打印文字大小
|
|
- **粗体**:设置文字粗体
|
|
- **下划线**:添加文字下划线
|
|
- **浓度**:调整打印浓度
|
|
|
|
### 二维码与条形码
|
|
- **打印二维码**:生成并打印 QR 码
|
|
- **打印条形码**:生成并打印一维条形码
|
|
|
|
### 走纸控制
|
|
- **打印空行**:添加空白行
|
|
- **走纸间距**:设置纸张走纸距离
|
|
|
|
### 综合测试
|
|
- **运行完整测试**:自动执行完整的功能测试流程,包含所有打印特性
|
|
|
|
## 使用方法
|
|
|
|
### 基本流程
|
|
|
|
1. **绑定服务** → 连接到打印服务
|
|
2. **初始化** → 初始化打印机硬件
|
|
3. **设置样式**(可选)→ 设置字体、粗体等
|
|
4. **添加内容** → 调用 printText/printQR 等方法
|
|
5. **提交打印** → 调用 start() 开始实际打印
|
|
6. **关闭打印机** → 完成后释放资源
|
|
|
|
### 快速测试
|
|
|
|
点击 **"快速打印测试"** 按钮可以一键完成整个流程,打印 "Hello Printer!" 测试文本。
|
|
|
|
### 完整测试
|
|
|
|
点击 **"运行完整测试"** 按钮将执行包含以下内容的完整测试:
|
|
- 标题(大字体、粗体)
|
|
- 普通文本
|
|
- 粗体文本
|
|
- 下划线文本
|
|
- 二维码
|
|
- 条形码
|
|
- 分隔线
|
|
|
|
## 代码结构
|
|
|
|
```
|
|
app/src/main/
|
|
├── aidl/android/bld/
|
|
│ └── IPrintManager.aidl # AIDL 接口定义
|
|
├── java/com/example/ops_android/
|
|
│ ├── MainActivity.kt # 主界面和测试 UI
|
|
│ └── printer/
|
|
│ └── PrinterManager.kt # 打印机封装类
|
|
```
|
|
|
|
## AIDL 接口
|
|
|
|
系统服务 `android.bld.PrintManager` 提供的主要方法:
|
|
|
|
| 方法 | 说明 |
|
|
|------|------|
|
|
| `initPrinter()` | 初始化打印机 |
|
|
| `closePrinter()` | 关闭打印机 |
|
|
| `printText(text)` | 打印文本 |
|
|
| `printText2(text)` | 打印文本(增强版) |
|
|
| `printQR(content, size)` | 打印二维码 |
|
|
| `printBarcode(content, type, width, height)` | 打印条形码 |
|
|
| `printLine(count)` | 打印空行 |
|
|
| `start()` | **重要:提交打印,开始出纸** |
|
|
| `setFontSize(size)` | 设置字体大小 |
|
|
| `setTextBold(bold)` | 设置粗体 |
|
|
| `setUnderLine(underline)` | 设置下划线 |
|
|
| `setConcentration(level)` | 设置浓度 |
|
|
|
|
## 注意事项
|
|
|
|
1. **必须调用 start()**:所有打印内容添加到队列后,必须调用 `start()` 才会实际打印出纸
|
|
2. **服务绑定**:需要先绑定服务并初始化打印机才能使用打印功能
|
|
3. **资源释放**:使用完毕后应调用 `closePrinter()` 和 `unbindService()` 释放资源
|
|
4. **错误处理**:所有方法返回 `Result<Unit>` 类型,使用 `fold` 或 `onSuccess`/`onFailure` 处理结果
|
|
5. **系统服务**:此应用依赖于设备预装的 `android.bld.PrintManager` 系统服务,普通 Android 设备无此服务
|
|
|
|
## 编译要求
|
|
|
|
- Android SDK 24+
|
|
- Kotlin
|
|
- Jetpack Compose
|
|
- AIDL 支持(已在 build.gradle.kts 中启用)
|
|
|
|
## 测试环境
|
|
|
|
此应用专为内置 PDA 打印机的定制 Android 设备设计,需要设备厂商在 `/system/framework/` 下预装 `android.bld.PrintManager` 服务。
|
|
|
|
## 状态显示
|
|
|
|
应用顶部的状态卡片会实时显示:
|
|
- 连接状态(绿色:已连接,红色:未连接)
|
|
- 操作结果
|
|
- 错误信息
|
|
|
|
## 示例代码
|
|
|
|
### 基础使用
|
|
|
|
```kotlin
|
|
val printerManager = PrinterManager(context)
|
|
|
|
// 绑定服务
|
|
printerManager.bindService()
|
|
|
|
// 打印
|
|
printerManager.initPrinter()
|
|
printerManager.printText2("Hello World\n")
|
|
printerManager.start()
|
|
printerManager.closePrinter()
|
|
|
|
// 解绑
|
|
printerManager.unbindService()
|
|
```
|
|
|
|
### 样式控制
|
|
|
|
```kotlin
|
|
printerManager.setFontSize(32)
|
|
printerManager.setTextBold(true)
|
|
printerManager.printText2("标题\n")
|
|
printerManager.setTextBold(false)
|
|
printerManager.printText2("内容\n")
|
|
printerManager.start()
|
|
```
|
|
|
|
### 打印二维码
|
|
|
|
```kotlin
|
|
printerManager.initPrinter()
|
|
printerManager.printQR("https://example.com", 6)
|
|
printerManager.start()
|
|
printerManager.closePrinter()
|
|
```
|