回复
#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
级别的权限。
前置环境
- 需要用到Full-SDK,可以参考官方文档自行编译,或者在 http://ci.openharmony.cn/workbench/cicd/dailybuild/dailylist 这里下载
- Full-SDK替换指南:https://docs.openharmony.cn/pages/v3.2/zh-cn/application-dev/quick-start/full-sdk-switch-guide.md/
项目权限配置
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 完整的实现和布局代码,可以参考项目开源仓库
总结
本文可以帮助你学习如何使用系统级api,配置Full-SDK,初步了解应用权限配置和访问控制权限的修改,以及 @system.device
和 @ohos.pasteboard
模块的基本使用。
持续关注
- 关于作者:I’m westinyang
- 哔哩哔哩:个人主页
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2024-1-18 11:51:10修改
赞
1
收藏
回复
相关推荐