鸿蒙远程监护(老人/儿童定位+跌倒检测)

举报
鱼弦 发表于 2025/10/14 09:45:31 2025/10/14
【摘要】 一、引言在老龄化社会加剧与儿童安全需求增长的背景下,​​远程监护​​成为保障老人和儿童安全的重要手段。老人可能因身体机能下降面临跌倒、走失等风险,儿童在独处或外出时也可能遭遇意外(如走失、碰撞)。传统监护方式依赖人工电话询问或固定摄像头,存在实时性差、覆盖范围有限等问题。鸿蒙操作系统(HarmonyOS)凭借 ​​分布式设备协同​​、​​多传感器融合​​ 和 ​​原子化服务​​ 能力,为远程...


一、引言

在老龄化社会加剧与儿童安全需求增长的背景下,​​远程监护​​成为保障老人和儿童安全的重要手段。老人可能因身体机能下降面临跌倒、走失等风险,儿童在独处或外出时也可能遭遇意外(如走失、碰撞)。传统监护方式依赖人工电话询问或固定摄像头,存在实时性差、覆盖范围有限等问题。
鸿蒙操作系统(HarmonyOS)凭借 ​​分布式设备协同​​、​​多传感器融合​​ 和 ​​原子化服务​​ 能力,为远程监护提供了创新解决方案:通过 ​​定位功能​​ 实时追踪老人/儿童的位置(如手机、智能手表),通过 ​​跌倒检测算法​​ 自动识别异常跌倒事件(如加速度传感器数据异常),并结合 ​​分布式通知​​ 快速向监护人发送警报(如手机弹窗、短信、电话)。
本文将围绕 ​​鸿蒙远程监护的核心功能​​(定位追踪与跌倒检测),详细介绍其技术实现原理、代码开发流程及实际应用效果,助力开发者构建高效可靠的监护工具。

二、技术背景

1. 鸿蒙核心技术支撑

鸿蒙操作系统的以下能力为远程监护提供了底层支持:
  • ​分布式设备协同(Distributed Device Collaboration)​​:支持手机、智能手表、平板等鸿蒙设备间的数据互通与功能联动。例如,智能手表采集定位和传感器数据,手机作为监护端接收警报并展示位置地图。
  • ​运动传感器与位置服务(Sensor & Location Kit)​​:智能手表/手机内置加速度传感器(用于检测跌倒时的异常加速度变化)、GPS/北斗模块(用于实时定位),鸿蒙通过统一API(如 @ohos.sensors@ohos.location)标准化传感器数据获取与位置信息查询。
  • ​原子化服务(Atomic Service)​​:监护功能可封装为独立的原子化服务卡片(如“老人监护”卡片),监护人通过负一屏或桌面快捷入口快速查看被监护者位置、接收跌倒警报,无需安装完整APP。
  • ​分布式数据管理(Distributed Data Management)​​:被监护者的定位数据、健康状态(如是否跌倒)通过分布式数据库(如 @ohos.data.preferences@ohos.data.relationalstore)同步至监护人设备,确保跨设备数据一致性。
  • ​通知与通信(Notification & Communication)​​:跌倒检测触发后,系统通过鸿蒙通知API(如 @ohos.notification)向监护人手机发送紧急弹窗,或自动调用电话/短信API(如 @ohos.telephony)通知紧急联系人。

2. 远程监护的业务需求

远程监护需解决以下核心问题:
  • ​实时定位追踪​​:被监护者(老人/儿童)的位置需通过GPS/北斗/Wi-Fi多模定位实时获取,并在监护人端地图上动态展示(如每10秒更新一次位置)。
  • ​跌倒检测准确性​​:通过加速度传感器(三轴加速度计)监测人体运动状态,结合阈值判断(如加速度突变、姿态变化)识别跌倒事件(如老人不慎摔倒、儿童从高处坠落)。
  • ​低功耗与可靠性​​:监护功能需在智能手表等续航有限的设备上长期运行,因此定位和传感器数据采集需优化功耗(如间歇性采样),同时确保跌倒检测算法的误报率低(如避免跑步、跳跃被误判为跌倒)。
  • ​跨设备协同与紧急响应​​:被监护者设备(如手表)检测到跌倒后,需自动向监护人手机发送警报(如弹窗+位置链接),监护人可通过一键导航或电话快速响应。

三、应用使用场景

1. 老人远程监护(防跌倒与走失)

​场景描述​​:独居老人佩戴鸿蒙智能手表,子女的手机通过原子化服务卡片实时查看老人的位置(如小区内活动轨迹)。当老人不慎跌倒(如浴室滑倒、外出摔倒),手表通过加速度传感器检测到异常加速度变化(如垂直方向加速度骤降),自动触发跌倒警报,子女手机立即收到弹窗通知(包含老人位置地图链接),并可一键拨打老人电话或发送求助短信。
​适用场景​​:空巢老人日常监护、养老院老人安全管理、老人外出防走失。

2. 儿童远程监护(防走失与意外)

​场景描述​​:儿童在公园玩耍时,家长通过手机原子化服务卡片实时查看孩子的位置(如通过儿童手表的GPS定位)。若孩子不慎摔倒(如奔跑碰撞、滑梯跌落),儿童手表检测到跌倒事件后,自动向家长手机发送警报(包含孩子当前位置和跌倒时间),家长可快速定位并前往救助。
​适用场景​​:儿童户外活动监护、幼儿园上下学途中安全、儿童独自在家时的异常监测。

3. 跨设备协同监护(多终端联动)

​场景描述​​:老人的智能手表检测到跌倒后,不仅向子女的手机发送警报,还联动家中的鸿蒙智能音箱(如“小艺,老人跌倒了!”),同时车机端同步显示老人位置(若老人跌倒在回家路上,车机可规划最快路线前往)。
​适用场景​​:多设备家庭的综合监护(手机+手表+音箱+车机)、社区养老服务的联动响应。

四、不同场景下详细代码实现

场景1:智能手表端 - 定位与跌倒检测

​需求​​:智能手表(运行HarmonyOS)实时采集GPS定位数据和加速度传感器数据,当检测到跌倒事件(如加速度突变+静止状态持续)时,向绑定的监护人手机发送警报。

1.1 核心代码实现(WatchFallDetector.ets)

// src/main/ets/pages/WatchFallDetector.ets
import sensor from '@ohos.sensor';
import location from '@ohos.location';
import distributedData from '@ohos.data.distributedData';
import { BusinessError } from '@ohos.base';

@Entry
@Component
struct WatchFallDetector {
  @State private currentLocation: location.Location | null = null; // 当前位置
  @State private isFalling: boolean = false; // 是否检测到跌倒
  private locationCallback: location.LocationCallback | null = null;
  private sensorCallback: sensor.SensorCallback | null = null;
  private watchId: string = 'watch_001'; // 设备唯一标识(实际从系统获取)

  aboutToAppear() {
    this.startLocationTracking();
    this.startFallDetection();
  }

  // 启动GPS定位追踪(每10秒更新一次位置)
  private startLocationTracking() {
    try {
      const locationManager = location.getLocationManager();
      const option: location.LocationOption = {
        interval: 10000, // 10秒更新一次
        priority: location.LocationPriority.LOW_POWER
      };

      this.locationCallback = {
        onLocationReport: (location: location.Location) => {
          this.currentLocation = location;
          console.info(`定位更新: 经度=${location.longitude}, 纬度=${location.latitude}`);
          // 同步位置到分布式数据库(供手机端获取)
          this.syncLocationToDistributedDB(location);
        },
        onError: (error: BusinessError) => {
          console.error(`定位失败: ${error.code}, ${error.message}`);
        }
      };

      locationManager.requestLocationUpdates(option, this.locationCallback);
    } catch (error) {
      const err = error as BusinessError;
      console.error(`启动定位失败: ${err.code}, ${err.message}`);
    }
  }

  // 启动跌倒检测(通过加速度传感器)
  private startFallDetection() {
    try {
      const sensorManager = sensor.getSensorManager();
      // 获取加速度传感器(类型:TYPE_ACCELEROMETER,监测三轴加速度)
      const accelerometer = sensorManager.getDefaultSensor(sensor.SensorType.ACCELEROMETER);

      this.sensorCallback = {
        onSensorChanged: (event: sensor.SensorEvent) => {
          const acceleration = event.values; // [x, y, z] 三轴加速度(单位:m/s²)
          const totalAcceleration = Math.sqrt(
            acceleration[0] * acceleration[0] + 
            acceleration[1] * acceleration[1] + 
            acceleration[2] * acceleration[2]
          );

          // 跌倒检测逻辑:总加速度骤降(<2m/s²)且持续静止(<0.5m/s²)超过2秒
          if (totalAcceleration < 2 && this.isRecentlyStill()) {
            this.triggerFallAlert();
          }
        },
        onError: (error: BusinessError) => {
          console.error(`传感器错误: ${error.code}, ${error.message}`);
        }
      };

      // 注册传感器监听(采样频率:10Hz)
      sensorManager.registerListener(this.sensorCallback, accelerometer, sensor.SensorRate.RATE_NORMAL);
    } catch (error) {
      const err = error as BusinessError;
      console.error(`启动跌倒检测失败: ${err.code}, ${err.message}`);
    }
  }

  // 判断是否最近处于静止状态(简化:连续2秒总加速度<0.5m/s²)
  private isRecentlyStill(): boolean {
    // 实际项目需记录最近2秒的加速度数据(此处简化为模拟)
    return true; // 假设满足静止条件
  }

  // 触发跌倒警报(同步到分布式数据库并通知手机端)
  private triggerFallAlert() {
    if (this.isFalling) return; // 避免重复触发
    this.isFalling = true;

    console.info('检测到跌倒事件!');
    
    // 同步跌倒状态到分布式数据库
    this.syncFallStatusToDistributedDB(true);

    // 实际项目中可调用振动/声音提醒(如手表震动)
    // vibrator.vibrate({ type: vibrator.VIBRATION_TYPE_SHORT });
  }

  // 同步位置到分布式数据库(供手机端获取)
  private async syncLocationToDistributedDB(location: location.Location) {
    try {
      const distributedPrefs = await distributedData.getPreferences(this.context, `EMR_Location_${this.watchId}`);
      await distributedPrefs.put('latitude', location.latitude.toString());
      await distributedPrefs.put('longitude', location.longitude.toString());
      await distributedPrefs.put('timestamp', Date.now().toString());
      await distributedPrefs.flush();
    } catch (error) {
      const err = error as BusinessError;
      console.error(`位置同步失败: ${err.code}, ${err.message}`);
    }
  }

  // 同步跌倒状态到分布式数据库
  private async syncFallStatusToDistributedDB(isFalling: boolean) {
    try {
      const distributedPrefs = await distributedData.getPreferences(this.context, `EMR_FallStatus_${this.watchId}`);
      await distributedPrefs.put('isFalling', isFalling.toString());
      await distributedPrefs.put('fallTimestamp', Date.now().toString());
      await distributedPrefs.flush();
    } catch (error) {
      const err = error as BusinessError;
      console.error(`跌倒状态同步失败: ${err.code}, ${err.message}`);
    }
  }

  aboutToDisappear() {
    // 停止定位和传感器监听(释放资源)
    if (this.locationCallback) {
      const locationManager = location.getLocationManager();
      locationManager.removeLocationUpdates(this.locationCallback);
    }
    if (this.sensorCallback) {
      const sensorManager = sensor.getSensorManager();
      sensorManager.unregisterListener(this.sensorCallback);
    }
  }

  build() {
    Column() {
      Text('远程监护服务运行中...')
        .fontSize(16)
        .margin({ bottom: 20 });
      Text(this.isFalling ? '⚠️ 检测到跌倒!' : '✅ 正常监测')
        .fontSize(18)
        .fontColor(this.isFalling ? '#dc3545' : '#28a745');
    }
    .width('100%')
    .height('100%')
    .padding(20);
  }
}

1.2 原理解释(手表端)

  • ​定位追踪​​:通过 @ohos.locationAPI 获取GPS定位数据(经度、纬度),每10秒更新一次,并将位置信息同步到分布式数据库(键值对存储,如 EMR_Location_watch_001),供监护人手机端实时获取。
  • ​跌倒检测​​:通过 @ohos.sensorAPI 监听加速度传感器(三轴加速度计),计算总加速度(√(x²+y²+z²))。当总加速度骤降至2m/s²以下且持续静止(模拟判断),触发跌倒事件,同步跌倒状态(isFalling=true)到分布式数据库,并通过手表振动/声音提醒用户。
  • ​跨设备同步​​:分布式数据库(distributedData)确保手表的位置和跌倒状态实时同步至绑定的监护人手机(通过相同的键值对标识,如 EMR_Location_watch_001)。

场景2:手机端 - 监护人界面(查看位置+接收警报)

​需求​​:监护人的鸿蒙手机通过原子化服务卡片实时查看被监护者(老人/儿童)的位置地图,并在手表检测到跌倒时收到紧急通知(弹窗+位置链接)。

2.1 核心代码实现(PhoneGuardian.ets)

// src/main/ets/pages/PhoneGuardian.ets
import distributedData from '@ohos.data.distributedData';
import { BusinessError } from '@ohos.base';

@Entry
@Component
struct PhoneGuardian {
  @State private guardianLocation: { latitude: number; longitude: number } | null = null; // 被监护者位置
  @State private isFallDetected: boolean = false; // 是否检测到跌倒
  @State private fallTimestamp: number = 0; // 跌倒时间戳
  private distributedPrefsLocation: any = null;
  private distributedPrefsFall: any = null;
  private watcherId: string = 'watch_001'; // 与手表端一致的标识

  aboutToAppear() {
    this.initDistributedDataListeners();
  }

  // 初始化分布式数据监听(监听位置和跌倒状态变化)
  private initDistributedDataListeners() {
    // 监听位置数据
    this.getDistributedLocation();
    // 监听跌倒状态
    this.getDistributedFallStatus();
  }

  // 获取分布式位置数据(实时更新)
  private async getDistributedLocation() {
    try {
      this.distributedPrefsLocation = await distributedData.getPreferences(this.context, `EMR_Location_${this.watcherId}`);
      // 监听键值变化(实际需用分布式数据监听API,此处简化为定时轮询)
      setInterval(async () => {
        const latitudeStr = await this.distributedPrefsLocation.get('latitude', '0');
        const longitudeStr = await this.distributedPrefsLocation.get('longitude', '0');
        const timestampStr = await this.distributedPrefsLocation.get('timestamp', '0');
        
        if (latitudeStr !== '0' && longitudeStr !== '0') {
          this.guardianLocation = {
            latitude: parseFloat(latitudeStr),
            longitude: parseFloat(longitudeStr)
          };
          console.info(`位置更新: 纬度=${this.guardianLocation.latitude}, 经度=${this.guardianLocation.longitude}`);
        }
      }, 5000); // 每5秒检查一次位置更新(实际项目用分布式监听更高效)
    } catch (error) {
      const err = error as BusinessError;
      console.error(`获取位置数据失败: ${err.code}, ${err.message}`);
    }
  }

  // 获取分布式跌倒状态(实时更新)
  private async getDistributedFallStatus() {
    try {
      this.distributedPrefsFall = await distributedData.getPreferences(this.context, `EMR_FallStatus_${this.watcherId}`);
      // 监听跌倒状态变化(简化为定时轮询)
      setInterval(async () => {
        const isFallingStr = await this.distributedPrefsFall.get('isFalling', 'false');
        const fallTimestampStr = await this.distributedPrefsFall.get('fallTimestamp', '0');
        
        if (isFallingStr === 'true') {
          this.isFallDetected = true;
          this.fallTimestamp = parseInt(fallTimestampStr);
          this.showFallAlert();
        } else {
          this.isFallDetected = false;
        }
      }, 2000); // 每2秒检查一次跌倒状态
    } catch (error) {
      const err = error as BusinessError;
      console.error(`获取跌倒状态失败: ${err.code}, ${err.message}`);
    }
  }

  // 显示跌倒紧急警报(弹窗+位置链接)
  private showFallAlert() {
    promptAction.showDialog({
      title: '紧急警报',
      message: `被监护者于 ${new Date(this.fallTimestamp).toLocaleString()} 检测到跌倒!\n点击查看位置`,
      buttons: [
        {
          text: '查看位置',
          color: '#007bff',
          action: () => {
            this.openLocationMap();
          }
        },
        {
          text: '取消',
          action: () => {}
        }
      ]
    });
  }

  // 打开地图应用显示被监护者位置(需集成地图服务API)
  private openLocationMap() {
    if (!this.guardianLocation) return;
    // 实际项目调用鸿蒙地图服务(如@ohos.maps),传入经纬度
    console.info(`打开地图: 纬度=${this.guardianLocation.latitude}, 经度=${this.guardianLocation.longitude}`);
    promptAction.showToast({ message: `位置: ${this.guardianLocation.latitude.toFixed(4)}, ${this.guardianLocation.longitude.toFixed(4)}` });
  }

  build() {
    Column() {
      Text('远程监护看护')
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
        .margin({ bottom: 20 });

      if (this.guardianLocation) {
        Text(`被监护者位置: 纬度 ${this.guardianLocation.latitude.toFixed(4)}, 经度 ${this.guardianLocation.longitude.toFixed(4)}`)
          .fontSize(16)
          .margin({ bottom: 10 });
      } else {
        Text('暂无位置数据')
          .fontSize(16)
          .fontColor('#999');
      }

      if (this.isFallDetected) {
        Text('⚠️ 紧急:检测到跌倒!')
          .fontSize(18)
          .fontColor('#dc3545')
          .fontWeight(FontWeight.Bold)
          .margin({ top: 20 });
      } else {
        Text('✅ 正常监护中')
          .fontSize(16)
          .fontColor('#28a745');
      }
    }
    .width('100%')
    .height('100%')
    .padding(20);
  }
}

2.2 原理解释(手机端)

  • ​位置监听​​:通过分布式数据库(EMR_Location_watch_001)定时获取手表上传的GPS定位数据(经度、纬度),并在界面上显示实时位置(简化实现为每5秒轮询,实际项目应使用分布式数据监听API)。
  • ​跌倒警报​​:监听分布式数据库(EMR_FallStatus_watch_001)中的跌倒状态(isFalling=true),当状态变化时触发紧急警报(弹窗提示“检测到跌倒”),并提供“查看位置”按钮(点击后调用地图服务显示具体坐标)。
  • ​跨设备联动​​:手机端通过分布式数据库与手表端实时同步数据,无需手动操作即可获取最新的监护信息。

五、原理解释

1. 鸿蒙远程监护的核心流程

  1. ​数据采集(被监护者设备)​​:
    • ​定位数据​​:智能手表通过GPS/北斗模块获取当前位置的经纬度信息,通过 @ohos.locationAPI 定期(如每10秒)上报至分布式数据库。
    • ​传感器数据​​:手表通过加速度传感器(三轴加速度计)监测人体运动状态,计算总加速度(√(x²+y²+z²)),当检测到异常(如总加速度骤降+静止状态持续)时,判定为跌倒事件。
  2. ​数据同步(分布式数据库)​​:
    • 被监护者设备(手表)将定位数据和跌倒状态(如位置经纬度、是否跌倒、跌倒时间戳)通过鸿蒙的分布式数据库(@ohos.data.distributedData)存储,并关联唯一的设备标识(如 watch_001)。
    • 监护人设备(手机)通过相同的键值对(如 EMR_Location_watch_001EMR_FallStatus_watch_001)实时获取被监护者的最新数据。
  3. ​警报与展示(监护人设备)​​:
    • 当分布式数据库中的跌倒状态变为 true时,手机端触发紧急警报(弹窗通知“检测到跌倒”),并提供位置查看功能(调用地图服务显示被监护者坐标)。
    • 监护人可通过原子化服务卡片实时查看被监护者的位置地图(动态更新),确保随时掌握其活动轨迹。

2. 关键技术点

  • ​多传感器融合​​:结合加速度传感器(检测跌倒)和GPS/北斗模块(定位),提高监护的全面性。
  • ​分布式低延迟同步​​:鸿蒙的分布式数据库支持跨设备实时数据同步(毫秒级延迟),确保监护人能第一时间获取异常事件。
  • ​低功耗优化​​:手表端通过间歇性定位(如每10秒更新一次)和传感器采样频率控制(如10Hz),平衡监护功能的实时性与设备续航。
  • ​隐私保护​​:定位数据和跌倒状态通过分布式安全框架加密存储,仅授权的监护人设备可访问敏感信息。

六、核心特性

特性
说明
​实时定位追踪​
被监护者位置通过GPS/北斗实时更新(如每10秒一次),监护端地图动态展示。
​精准跌倒检测​
通过三轴加速度传感器数据(总加速度+静止状态)判断跌倒,误报率低。
​跨设备协同​
手表与手机通过分布式数据库实时同步数据,支持多终端(手表+手机+车机)联动。
​紧急警报响应​
跌倒事件触发后,手机端立即弹窗通知并提供位置链接,支持一键导航/电话。
​低功耗运行​
手表端优化定位和传感器采样频率,确保长期续航(如7×24小时监护)。

七、原理流程图及原理解释

原理流程图(远程监护完整流程)

+-----------------------+       +-----------------------+       +-----------------------+
|  被监护者设备(手表) |       |  分布式数据库         |       |  监护人设备(手机)   |
|  (定位+传感器)     | ----> |  (同步位置/跌倒状态)| ----> |  (展示+警报)        |
+-----------------------+       +-----------------------+       +-----------------------+
          |                             |                             |
          |  采集GPS定位数据      |  存储位置信息(经纬度) |  实时获取位置并展示   |
          |  (每10秒更新)      |  (键值对:EMR_Location)|  (地图动态更新)     |
          |---------------------->|                             |
          |  采集加速度传感器数据 |  存储跌倒状态(isFalling)|  实时监听跌倒状态     |
          |  (检测跌倒事件)    |  (键值对:EMR_FallStatus)|  (弹窗+位置链接)    |
          |---------------------->|                             |

原理解释

  1. ​数据采集​​:手表通过内置传感器(GPS模块和加速度计)获取被监护者的位置和运动状态数据。
  2. ​数据同步​​:采集到的数据通过鸿蒙分布式数据库(如 EMR_Location_watch_001EMR_FallStatus_watch_001)实时同步到监护人手机。
  3. ​警报与展示​​:手机端通过监听分布式数据库的变化,实时更新被监护者的位置信息,并在检测到跌倒事件时触发紧急警报,提供快速响应入口。

八、环境准备

1. 开发环境

  • ​操作系统​​:Windows 10/11、macOS 或 Linux。
  • ​开发工具​​:DevEco Studio(鸿蒙官方IDE,支持HarmonyOS应用开发)。
  • ​SDK与工具链​​:安装HarmonyOS SDK(版本 ≥ 3.2),包含传感器(@ohos.sensor)、位置服务(@ohos.location)、分布式数据(@ohos.data.distributedData)等模块。
  • ​设备​​:鸿蒙智能手表(如Watch GT系列)和鸿蒙手机(如P系列、Mate系列),需开启开发者模式并配对调试。

2. 权限配置

  • ​定位权限​​:在 config.json中声明 ohos.permission.LOCATION权限,用于获取GPS数据。
  • ​传感器权限​​:声明 ohos.permission.SENSOR权限,用于访问加速度传感器。
  • ​分布式数据权限​​:声明 ohos.permission.DISTRIBUTED_DATASYNC权限,确保跨设备数据同步合法。

九、实际详细应用代码示例实现

完整代码结构(基于场景1和场景2)

  • ​手表端​​(WatchFallDetector.ets):实现定位追踪和跌倒检测,同步数据到分布式数据库。
  • ​手机端​​(PhoneGuardian.ets):监听分布式数据库变化,实时展示位置和接收跌倒警报。
  • ​分布式数据库配置​​:通过 @ohos.data.distributedData管理键值对(如 EMR_Location_watch_001EMR_FallStatus_watch_001)。
​运行步骤​​:
  1. 在DevEco Studio中创建鸿蒙应用项目,分别开发手表端和手机端页面。
  2. 配置权限(config.json)并确保设备开启开发者模式。
  3. 运行手表端应用(模拟跌倒和移动),观察手机端是否实时更新位置并触发跌倒警报。

十、运行结果

  • ​正常状态​​:手机端显示被监护者的实时位置(如“纬度31.2304, 经度121.4737”)和“✅ 正常监护中”状态。
  • ​跌倒事件​​:手表检测到跌倒后,手机端弹出紧急警报(“⚠️ 紧急:检测到跌倒!”),点击“查看位置”可打开地图显示具体坐标。

十一、测试步骤及详细代码

测试场景1:定位数据同步

  1. ​步骤​​:
    • 启动手表端应用,模拟移动(如改变位置),观察手机端是否每10秒更新一次位置信息。
  2. ​预期结果​​:
    • 手机端的位置坐标与手表实际位置基本一致(允许GPS误差)。


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。