以下是一个基于 ​​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. 运行效果

  1. 点击「开始采集」实时显示陀螺仪XYZ轴数据
  2. 数据自动追加保存到设备存储的 gyro_log.txt
  3. 点击「读取日志」显示历史记录

6. 高级扩展方向

  1. 添加传感器数据可视化(折线图)
  2. 实现数据加密存储
  3. 增加低功耗模式(使用WorkScheduler)
  4. 集成设备健康状态监测(BatteryManager)

注意事项

  1. ​权限处理​​:必须动态申请敏感权限(如6.0+系统)
  2. ​资源释放​​:在 onStop() 生命周期中取消传感器订阅
  3. ​文件路径​​:使用系统提供的 userDataPath 保证跨设备兼容性
  4. ​线程管理​​:传感器回调在子线程,UI更新需切回主线程

该实例完整展示了 HarmonyOS 系统级开发的核心要素,包括硬件交互、文件操作、权限管理和异步编程。开发者可根据实际需求扩展更多系统能力(如位置服务、多媒体设备等)。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐