HarmonyOS5.0,中SDK 系统级 API 的完整开发实例!
《HarmonyOS设备信息采集器开发实例解析》摘要:本文演示了一个基于ArkTS的HarmonyOS设备信息采集器实现方案,完整展示了系统级API调用流程。项目通过SensorService调用陀螺仪传感器,实时采集XYZ轴数据,并利用FileUtils将数据持久化存储。关键点包括:动态权限申请机制处理传感器访问权限设备管理API实现传感器数据订阅/取消文件系统API完成数据读写操作异步回调处理
·
以下是一个基于 ArkTS 和 HarmonyOS SDK 系统级 API 的完整开发实例,演示如何调用设备硬件能力(如传感器)和系统服务(如文件管理):
实例名称:设备信息采集器
功能描述:实时获取设备陀螺仪数据并保存到本地文件
1. 项目结构
├── entry/src/main/
│ ├── ts/
│ │ ├── pages/
│ │ │ └── Index.ets # 主界面
│ │ ├── services/
│ │ │ └── SensorService.ets # 传感器服务
│ │ └── utils/
│ │ └── FileUtils.ets # 文件工具类
│ └── json/
│ └── app.json # 配置文件
2. 核心代码实现
Index.ets (主界面)
@Entry
@Component
struct Index {
private sensorData: Text = new Text()
private sensorService: SensorService = new SensorService()
private fileUtil: FileUtils = new FileUtils()
build() {
Column({ space: 30 }) {
Text('陀螺仪数据采集器')
.fontSize(30)
.fontColor('#007AFF')
this.sensorData
.fontSize(20)
.fontColor('#333333')
Button('开始采集')
.onClick(() => {
this.sensorService.startGyroscope()
this.sensorService.on('gyroData', (data) => {
this.sensorData.text = `X:${data.x.toFixed(2)}\nY:${data.y.toFixed(2)}\nZ:${data.z.toFixed(2)}`
// 自动保存数据
this.fileUtil.writeToFile('gyro_log.txt',
`时间:${new Date().toLocaleString()}\n数据:${JSON.stringify(data)}\n\n`
)
})
})
Button('读取日志')
.onClick(() => {
this.fileUtil.readFile('gyro_log.txt')
.then(data => this.sensorData.text = data)
.catch(err => this.sensorData.text = '读取失败')
})
}
.width('100%')
.height('100%')
}
}
SensorService.ets (传感器服务)
@Entry
@Service
class SensorService extends ServiceAbility {
private gyroSubscription: number = 0
onStartCommand(intent: Intent): number {
return ServiceAbility.START_STICKY
}
startGyroscope() {
// 获取设备管理器
const deviceManager = DeviceManager.getInstance()
// 检查传感器权限
if (!this.checkPermission('ohos.permission.ACCESS_SENSOR')) {
this.requestPermissionsFromUser(['ohos.permission.ACCESS_SENSOR'])
return
}
// 订阅陀螺仪数据
this.gyroSubscription = deviceManager.on('sensor',
(event: GyroscopeEvent) => {
this.emit('gyroData', event.data)
},
{ sensorType: SensorType.GYROSCOPE, rate: SensorRate.UI }
)
}
stopGyroscope() {
DeviceManager.getInstance().off(this.gyroSubscription)
}
}
FileUtils.ets (文件工具类)
class FileUtils {
private fileSystem: FileSystemManager =
FileSystemManager.getInstance()
writeToFile(filePath: string, content: string) {
return this.fileSystem.writeFile({
filePath: this.getFilePath(filePath),
encoding: 'utf8',
data: content,
append: true
})
}
readFile(filePath: string) {
return this.fileSystem.readFile({
filePath: this.getFilePath(filePath),
encoding: 'utf8'
})
}
private getFilePath(fileName: string) {
return `${this.fileSystem.env.userDataPath}/${fileName}`
}
}
3. 配置文件 app.json
{
"app": {
"bundleName": "com.example.sensorapp",
"version": { "code": 1, "name": "1.0.0" }
},
"deviceConfig": {
"formFactor": "phone",
"screenSize": { "width": 1080, "height": 1920 }
},
"module": {
"reqPermissions": [
{
"name": "ohos.permission.ACCESS_SENSOR",
"reason": "$string:access_sensor_reason",
"maxSdkVersion": 6
},
{
"name": "ohos.permission.WRITE_USER_STORAGE",
"reason": "$string:write_storage_reason"
}
]
}
}
4. 关键系统 API 解析
| API 分类 | 核心方法 |
|---|---|
| 设备管理 | DeviceManager.on() - 订阅传感器数据DeviceManager.off() - 取消订阅 |
| 文件系统 | FileSystemManager.writeFile() - 写入文件readFile() - 读取文件内容 |
| 权限管理 | checkPermission() - 检查权限requestPermissionsFromUser() - 动态申请权限 |
5. 运行效果
- 点击「开始采集」实时显示陀螺仪XYZ轴数据
- 数据自动追加保存到设备存储的
gyro_log.txt - 点击「读取日志」显示历史记录
6. 高级扩展方向
- 添加传感器数据可视化(折线图)
- 实现数据加密存储
- 增加低功耗模式(使用WorkScheduler)
- 集成设备健康状态监测(BatteryManager)
注意事项
- 权限处理:必须动态申请敏感权限(如6.0+系统)
- 资源释放:在
onStop()生命周期中取消传感器订阅 - 文件路径:使用系统提供的
userDataPath保证跨设备兼容性 - 线程管理:传感器回调在子线程,UI更新需切回主线程
该实例完整展示了 HarmonyOS 系统级开发的核心要素,包括硬件交互、文件操作、权限管理和异步编程。开发者可根据实际需求扩展更多系统能力(如位置服务、多媒体设备等)。
更多推荐



所有评论(0)