HarmonyOS 鸿蒙Next如何在离线状态链接打印机并打印

发布于 1周前 作者 zlyuanteng 来自 鸿蒙OS

HarmonyOS 鸿蒙Next如何在离线状态链接打印机并打印

HarmonyOS NEXT 如何在离线状态链接打印机并打印?是用蓝牙链接打印机吗?

2 回复

离线状态,可以通过蓝牙扫描连接打印机进行打印。

demo:

import connection from '@ohos.bluetooth.connection';
import { BusinessError } from '@ohos.base';
import { promptAction } from '@kit.ArkUI';
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';

interface Device {
  name?: string
  deviceId?: string
}

@Entry
@Component
struct Index {
  private context = getContext(this) as common.UIAbilityContext
  @State findList: Device[] = []

  aboutToAppear(): void {
    const permissions: Array<Permissions> = ['ohos.permission.ACCESS_BLUETOOTH'];
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    atManager.requestPermissionsFromUser(this.context, permissions).then((data) => {

      // 授权成功
    }).catch((err: BusinessError) => {
      console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
    })
  }

  build() {
    Flex({ direction: FlexDirection.Column }) {
      Row() {
        Button("扫描蓝牙").onClick(() => {
          // 开启扫描
          try {
            connection.startBluetoothDiscovery();
            console.info('startBleScan success')
            promptAction.showToast({
              message: "已打开"
            })
          } catch (err) {
            promptAction.showToast({
              message: "蓝牙开关未打开"
            })
          }

          // 接收扫描结果
          connection.on('bluetoothDeviceFind', (data: string[]) => {
            console.log('data: ' + JSON.stringify(data) + connection.getRemoteDeviceName(data[0]))
            if (!this.findList.find((item: Device) => item.deviceId === data[0])) {
              this.findList.push({
                name: connection.getRemoteDeviceName(data[0]),
                deviceId: data[0]
              })
            }
          });
        })

        Button("停止扫描").onClick(() => {
          try {
            // 关闭扫描
            connection.stopBluetoothDiscovery();
            console.info('stopBleScan success');
            promptAction.showToast({
              message: "停止扫描"
            })
          } catch (err) {
            promptAction.showToast({
              message: "蓝牙已关闭"
            })
          }
        })

        Button("清空").onClick(() => {
          this.findList = []
        })
      }

      List() {
        ForEach(this.findList, (item: Device) => {
          ListItem() {
            Flex({ alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceBetween }) {
              Column() {
                Text(`设备名称:${item?.name}`)
                Text(`设备id:${item?.deviceId}`).fontColor("#ffcbcbcb").fontSize(12)
              }
              .alignItems(HorizontalAlign.Start)

              Row({ space: 5 }) {
                Button("链接").width(60).height(20).fontSize(12).onClick(() => {
                  try {
                    // 实际的地址可由扫描流程获取
                    connection.pairDevice(item.deviceId, () => {
                      promptAction.showToast({
                        message: "配对成功"
                      })
                    });
                  } catch (err) {
                    console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' +
                    (err as BusinessError).message);
                  }
                })
              }
            }
            .height(50)
            .backgroundColor("#fff")
            .width("100%")
            .borderRadius(10)
            .padding(6)
          }.padding(4)
        })
      }
      .height(200)
      .width("100%")
      .flexGrow(1)
      .flexShrink(1)
      .flexBasis(1)
    }.padding(10).width('100%').height('100%').backgroundColor("#ffcdcdcd")
  }
}

module.json5文件中需要申请权限:

"requestPermissions": [
  {
    "name": "ohos.permission.ACCESS_BLUETOOTH",
    "reason": "$string:module_desc",
    "usedScene": {
      "abilities": [
        "FormAbility"
      ],
      "when": "inuse"
    }
  }
]

1、connection.startBluetoothDiscovery是经典蓝牙扫描,ble.startBLEScan是低功耗蓝牙扫描。ble的startBLEScan是只能扫描到ble设备,如果伙伴想要扫描到系统设置中的所有设备,需要去调用connection.startbluetoothdiscovery

2、可参考官网开发指导:【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/gatt-development-guide-V5

使用CONNECTION连接模块和外设配对、连接成功,再使用SOCKET模块继续进行后续的数据传输等功能 数据传输参考官网开发指导:【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/spp-development-guide-V5

相关参考文档:【 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/connectivity-kit-intro-V5#ZH-CN_TOPIC_0000001930755869__蓝牙简介

更多关于HarmonyOS 鸿蒙Next如何在离线状态链接打印机并打印的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next在离线状态下连接打印机并打印,主要依赖于鸿蒙系统的本地设备发现和通信能力。以下是一些核心步骤:

  1. 启用本地设备发现:确保鸿蒙设备上的“本地设备发现”或类似功能已启用,这允许设备在没有网络连接的情况下寻找并连接附近的打印机。

  2. 打印机支持:确认打印机支持离线打印功能,并已经通过蓝牙、Wi-Fi Direct或其他直连技术配对到鸿蒙设备上。

  3. 安装并配置打印驱动:鸿蒙系统应内置有支持广泛打印机型号的驱动。如果内置驱动不支持,则需要确保在设备连接前已经通过USB或其他方式安装了相应的打印驱动。

  4. 选择打印机:在鸿蒙设备的打印设置中,选择已连接的打印机作为目标设备。

  5. 执行打印任务:在应用程序中选择要打印的文件,选择打印选项并发送打印任务到选定的打印机。

请注意,离线打印功能的具体实现可能因打印机型号和鸿蒙系统版本而异。确保所有设备和软件都已更新到最新版本,以获得最佳兼容性和功能支持。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部