#2023盲盒+码# 设备信息应用开发指导 原创

westinyang
发布于 2023-8-25 17:53
浏览
0收藏

【本文正在参加 2023「盲盒」+码有奖征文活动】 https://ost.51cto.com/posts/25284

@toc

关于作者:I’m westinyang

序言

测试设备:OpenHarmony 3.2 Release (API9)

本文讲解如何开发一个读取并展示设备关键信息的应用,点击信息行可直接复制值,信息获取用到了 @system.device 模块,部分接口需要系统权限,如设备序列号、UDID的获取需要用到 ohos.permission.sec.ACCESS_UDID system_basic 级别的权限。

前置环境

项目权限配置

entry/src/main/module.json5

"requestPermissions": [
  {
    "name": "ohos.permission.sec.ACCESS_UDID"
  }
],

访问控制权限修改

openharmony-sdk\9\toolchains\lib\UnsgnedReleasedProfileTemplate.json

"apl":"system_basic",
"app-feature":"hos_system_app"

开发步骤

封装信息展示行

先封装一个通用的信息展示行,用于主页布局中展示获取的设备信息。

@Builder RowItem(key: string | Resource, val: string, width: Length = 'auto')  {
  Row() {
    Text(key).fontSize(16).fontColor('#FF182431').margin({ left: 14 })
    Blank()
    Text(val).fontSize(14).fontColor('#99182431').margin({ right: 14 }).width(width).textAlign(TextAlign.End)
  }.width('100%').height(48).onClick(() => {
    // 如果是Resource资源,则需要获取下对应的字符串值
    if (typeof key == 'object') {
      key = key as Resource
      globalThis.resourceManager.getStringValue(key.id).then(value => {
        let keyStr = value;
        this.copyVal(keyStr, val)
      }).catch(error => {
        console.log("getStringValue promise error is " + error);
      });
    } else {
      this.copyVal(key as string, val);
    }
  })
}

主要布局代码

用到了List、ListItem

import deviceInfo from '@ohos.deviceInfo'

@Builder MainContent() {
  Column() {
    List() {
      ListItem() { this.RowItem($r('app.string.DeviceInfo_product_model'), deviceInfo.productModel); }
      ListItem() { this.RowItem($r('app.string.DeviceInfo_os_full_name'), deviceInfo.osFullName); }
      ListItem() { this.RowItem($r('app.string.DeviceInfo_display_version'), deviceInfo.displayVersion); }
      ListItem() { this.RowItem($r('app.string.DeviceInfo_os_release_type'), deviceInfo.osReleaseType); }
      ListItem() { this.RowItem($r('app.string.DeviceInfo_abi_list'), deviceInfo.abiList); }
      ListItem() { this.RowItem($r('app.string.DeviceInfo_sdk_api_version'), ''+deviceInfo.sdkApiVersion); }
      ListItem() { this.RowItem($r('app.string.DeviceInfo_serial'), deviceInfo.serial); }
      ListItem() { this.RowItem('UDID', deviceInfo.udid, '60%'); }
    }
    .width('100%').height('auto')
    .divider({ strokeWidth: 0.5, color: '#cccccc', startMargin: 14, endMargin: 14 })
  }.borderRadius(20).backgroundColor('#fff').margin({bottom: 15})

  Column() {
    Text($r('app.string.Index_oss_community')).fontSize(20).fontColor('#182431').fontWeight(500).margin(15)
    Image($r('app.media.ohosdev_qrcode')).width(150).height(150).margin({bottom: 5})
  }.width('100%').backgroundColor('#fff').padding({left: 10, right: 10, top: 5, bottom: 5}).borderRadius(20).margin({bottom: 15})
}

实现点击复制值

@ohos.pasteboard 提供管理系统剪贴板的能力,为系统复制、粘贴功能提供支持

import pasteboard from '@ohos.pasteboard';

copyVal(key: string, val: string) {
  let pasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, val)
  pasteboard.getSystemPasteboard()
  let systemPasteboard = pasteboard.getSystemPasteboard();
  systemPasteboard.setData(pasteData, (err, data) => {
    if (err) {
      console.error('Failed to set PasteData. Cause: ' + err.message);
      return;
    }
    console.info('Succeeded in setting PasteData.');
    // 获取复制提示i18n字符串
    globalThis.resourceManager.getStringValue($r('app.string.DeviceInfo_copy_prompt').id).then(value => {
      promptAction.showToast({
        message: value == '已复制' ? value + ' ' + key : key + ' ' + value,
        duration: 1000,
      });
    }).catch(error => {
      console.log("getStringValue promise error is " + error);
    });
  });
}

开源地址和截图预览

https://gitee.com/ohos-dev/device-info 完整的实现和布局代码,可以参考项目开源仓库

#2023盲盒+码# 设备信息应用开发指导-鸿蒙开发者社区

总结

本文可以帮助你学习如何使用系统级api,配置Full-SDK,初步了解应用权限配置和访问控制权限的修改,以及 @system.device@ohos.pasteboard 模块的基本使用。

持续关注

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2024-1-18 11:51:10修改
1
收藏
回复
举报
回复
    相关推荐