鸿蒙位置服务获取(GPS定位当前城市)

举报
鱼弦 发表于 2025/09/19 10:07:59 2025/09/19
【摘要】 1. 引言在移动应用开发中,​​位置服务(Location Service)是连接用户物理世界与数字体验的关键桥梁​​。无论是导航类应用需要实时获取用户坐标,还是生活服务类应用(如外卖、打车)依赖城市级定位提供周边信息,亦或是社交类应用基于位置推荐附近好友,精准的位置信息都是核心需求之一。鸿蒙(HarmonyOS)作为面向全场景的操作系统,提供了统一的 ​​位置服务API​​,支持通过GPS...


1. 引言

在移动应用开发中,​​位置服务(Location Service)是连接用户物理世界与数字体验的关键桥梁​​。无论是导航类应用需要实时获取用户坐标,还是生活服务类应用(如外卖、打车)依赖城市级定位提供周边信息,亦或是社交类应用基于位置推荐附近好友,精准的位置信息都是核心需求之一。鸿蒙(HarmonyOS)作为面向全场景的操作系统,提供了统一的 ​​位置服务API​​,支持通过GPS、Wi-Fi、基站等多种方式获取用户的地理位置(经纬度),并进一步解析为城市、街道等语义化信息。

用户在使用HarmonyOS应用时,常见的位置相关场景包括:

  • ​地图导航类应用​​(如高德、百度地图):获取用户当前GPS坐标,实时规划路线;
  • ​生活服务类应用​​(如美团、滴滴):根据用户所在城市推荐附近的餐厅、车辆;
  • ​社交类应用​​(如微信、陌陌):基于位置信息推荐“附近的人”或活动;
  • ​工具类应用​​(如天气APP):根据当前城市显示实时天气和预报。

然而,位置信息的获取涉及用户隐私(如精确到街道的坐标),​​鸿蒙系统通过严格的权限管理和分级定位策略​​,要求应用必须先申请位置权限并通过用户授权,才能调用GPS等定位硬件。同时,为了平衡精度与功耗,开发者需根据场景选择合适的定位方式(如高精度GPS定位或低功耗的基站/Wi-Fi定位)。

本文将深入探讨鸿蒙位置服务的核心技术,聚焦 ​​“获取GPS定位并解析当前城市”​​ 这一典型需求,通过完整的代码示例与流程解析,帮助开发者实现安全、高效的位置信息获取功能。


2. 技术背景

​2.1 鸿蒙位置服务的核心机制​

鸿蒙的位置服务基于 ​@ohos.location 模块​​,提供了一套完整的API用于获取用户地理位置,其核心能力包括:

  • ​定位方式​​:支持 ​​GPS定位​​(高精度,依赖卫星信号,适合户外场景)、​​Wi-Fi定位​​(中精度,依赖周边Wi-Fi热点,适合室内或城市环境)、​​基站定位​​(低精度,依赖移动网络基站,适合无Wi-Fi/GPS的场景);
  • ​权限管理​​:通过 ​ohos.permission.LOCATION​ 权限控制应用对位置信息的访问,分为 ​​“仅在使用时允许”(前台定位)​​ 和 ​​“始终允许”(后台定位)​​ 两种授权级别(需根据场景选择);
  • ​位置数据​​:返回用户的经纬度坐标(latitudelongitude),可通过逆地理编码(Reverse Geocoding)解析为城市、街道等语义化信息;
  • ​分级策略​​:开发者可配置定位参数(如精度要求、是否启用GPS),系统根据配置选择最优的定位方式以平衡精度与功耗。

​2.2 关键技术点​

  • ​权限申请​​:应用必须在 module.json5 中声明 ohos.permission.LOCATION 权限,并在运行时通过系统API动态申请用户授权;
  • ​定位客户端​​:通过 LocationManager 创建定位会话,配置定位参数(如定位模式、间隔时间),并监听位置更新事件;
  • ​逆地理编码​​:将获取的经纬度坐标转换为城市名称(通常需调用第三方地图服务API,如高德、百度,或使用鸿蒙提供的本地化服务);
  • ​低功耗设计​​:根据场景需求选择合适的定位模式(如仅GPS定位高精度但耗电,或Wi-Fi+基站混合定位低功耗但精度稍低)。

​2.3 典型应用场景​

场景类型 需求描述 核心定位需求
导航类应用 实时获取用户GPS坐标,规划从当前位置到目的地的路线 高精度GPS定位(持续更新)
生活服务类应用 获取用户当前所在城市,推荐周边的商家或服务(如外卖、打车) 城市级定位(精度到区/县即可)
社交类应用 基于用户当前城市或附近区域,推荐“附近的人”或活动 中精度定位(街道/地标级)
工具类应用 根据当前城市显示天气、空气质量等本地化信息 城市级或区域级定位

3. 应用使用场景

​3.1 典型H5应用场景​

  • ​移动端HarmonyOS应用​​:天气预报APP(显示当前城市天气)、外卖APP(推荐附近餐厅)、地图导航APP(实时定位起点);
  • ​跨设备场景​​:鸿蒙手机与平板协同时,共享当前城市信息(如手机定位城市后同步到平板的天气组件);
  • ​后台服务​​:需要定期更新用户位置的后台任务(如运动轨迹记录),需遵循系统对后台定位的限制(通常需用户授权“始终允许”)。

4. 不同场景下的详细代码实现

​4.1 环境准备​

  • ​开发工具​​:DevEco Studio(鸿蒙官方IDE,支持ArkTS/JS开发);
  • ​核心技术​​:
    • @ohos.location 模块​​:提供定位API(如获取经纬度、配置定位参数);
    • @ohos.security.permissions 模块​​:用于权限申请与校验(如 requestPermissionsFromUser);
    • ​逆地理编码​​:通过第三方地图服务(如高德API)或鸿蒙本地化服务将经纬度转换为城市名称;
  • ​关键概念​​:
    • ​权限声明​​:在 module.json5 中配置 requestPermissions 字段;
    • ​定位客户端​​:通过 location.getLocationManager() 获取系统级定位管理实例;
    • ​定位参数​​:包括定位模式(高精度/GPS/Wi-Fi/基站)、是否返回地址信息、定位间隔等。

​4.2 典型场景1:申请位置权限并获取GPS定位当前城市(ArkTS实现)​

​4.2.1 代码实现步骤​

​4.2.1.1 配置权限(module.json5)​

在应用的配置文件中声明位置权限,并向用户说明用途:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.LOCATION",
        "reason": "用于获取您的当前位置,提供城市级服务(如天气、周边推荐)"
      }
    ]
  }
}
​4.2.1.2 核心代码(MainAbility.ets)​
import location from '@ohos.location';
import permissions from '@ohos.security.permissions';
import promptAction from '@ohos.promptAction';
import { BusinessError } from '@ohos.base';

// 位置服务管理类
export default class LocationService {
  private context: common.UIAbilityContext; // Ability上下文
  private locationManager?: location.LocationManager; // 定位管理实例

  constructor(context: common.UIAbilityContext) {
    this.context = context;
  }

  // 检查位置权限是否已授予
  private checkLocationPermission(): Promise<boolean> {
    return permissions.verifySelfPermission(this.context, 'ohos.permission.LOCATION')
      .then((result) => {
        return result === permissions.PermissionResult.PERMISSION_GRANTED;
      })
      .catch((error: BusinessError) => {
        console.error('检查位置权限失败:', error.message);
        return false;
      });
  }

  // 动态申请位置权限
  private requestLocationPermission(): Promise<boolean> {
    return permissions.requestPermissionsFromUser(this.context, ['ohos.permission.LOCATION'])
      .then((result) => {
        const granted = result[0]; // 第一个权限(ohos.permission.LOCATION)的申请结果
        if (granted) {
          promptAction.showToast({
            message: '位置权限申请成功',
            duration: 2000
          });
        } else {
          promptAction.alert({
            title: '权限提示',
            message: '需要位置权限才能获取当前城市,请前往设置中开启',
            primaryButton: {
              value: '去设置',
              action: () => {
                promptAction.showToast({
                  message: '请手动开启位置权限',
                  duration: 3000
                });
              }
            },
            secondaryButton: {
              value: '取消',
              action: () => {}
            }
          });
        }
        return granted;
      })
      .catch((error: BusinessError) => {
        console.error('申请位置权限失败:', error.message);
        return false;
      });
  }

  // 获取当前GPS定位并解析城市名称
  public async getCurrentCity(): Promise<string> {
    // 1. 检查并申请权限
    const hasPermission = await this.checkLocationPermission();
    if (!hasPermission) {
      const granted = await this.requestLocationPermission();
      if (!granted) {
        throw new Error('位置权限未授予,无法获取当前城市');
      }
    }

    // 2. 获取定位管理实例
    this.locationManager = location.getLocationManager(this.context);
    if (!this.locationManager) {
      throw new Error('获取定位管理器失败');
    }

    // 3. 配置定位参数(高精度GPS定位,仅获取一次)
    const locationRequest = {
      priority: location.LocationPriority.LOCATION_PRIORITY_HIGH_ACCURACY, // 高精度(优先使用GPS)
      needAddress: true, // 需要返回地址信息(包含城市)
      interval: 0, // 单次定位(0表示不重复)
      duration: 0  // 不限制持续时间
    };

    // 4. 启动单次定位请求(获取经纬度和地址)
    return new Promise((resolve, reject) => {
      this.locationManager.once(location.LocationEventType.ON_LOCATION_REPORT, (event: location.LocationEvent) => {
        const locationData = event.location;
        if (locationData && locationData.address && locationData.address.city) {
          const city = locationData.address.city; // 直接获取地址中的城市信息(鸿蒙本地化服务可能已解析)
          promptAction.showToast({
            message: `当前城市:${city}`,
            duration: 2000
          });
          resolve(city);
        } else {
          // 若地址信息未直接返回城市,需通过经纬度逆地理编码(此处简化为提示经纬度)
          const latitude = locationData?.latitude || 0;
          const longitude = locationData?.longitude || 0;
          reject(new Error(`获取城市失败,当前坐标:纬度${latitude}, 经度${longitude}(需逆地理编码解析城市)`));
        }
      });

      this.locationManager.requestOnce(locationRequest)
        .catch((error: BusinessError) => {
          console.error('定位请求失败:', error.message);
          reject(new Error(`定位失败:${error.message}`));
        });
    });
  }
}

// 在Ability的生命周期中使用
@Entry
@Component
struct MainAbility {
  @State locationService: LocationService | null = null;

  aboutToAppear() {
    const context = getContext(this) as common.UIAbilityContext;
    this.locationService = new LocationService(context);
  }

  // 示例:获取当前城市按钮点击事件
  getCurrentCity() {
    if (!this.locationService) return;
    this.locationService.getCurrentCity()
      .then((city) => {
        console.info('当前城市:', city);
      })
      .catch((error: Error) => {
        promptAction.alert({
          title: '获取失败',
          message: error.message,
          primaryButton: { value: '确定' }
        });
      });
  }

  build() {
    Column() {
      Text('鸿蒙位置服务获取当前城市示例')
        .fontSize(24)
        .margin(20)
      Button('获取当前城市')
        .onClick(() => this.getCurrentCity())
        .margin(10)
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

​4.2.2 代码解析​

  • ​权限声明​​:在 module.json5 中声明 ohos.permission.LOCATION,并向用户说明用途(如“用于获取当前城市”);
  • ​权限校验与申请​​:
    • checkLocationPermission 方法通过 permissions.verifySelfPermission 检查权限是否已授予;
    • requestLocationPermission 方法弹出系统授权弹窗,用户确认后获得授权;
  • ​定位操作​​:
    • ​获取定位管理器​​:通过 location.getLocationManager(context) 获取系统级定位管理实例;
    • ​配置定位参数​​:设置 priority: LOCATION_PRIORITY_HIGH_ACCURACY(高精度,优先使用GPS),needAddress: true(请求返回地址信息,可能包含城市),interval: 0(单次定位,不重复);
    • ​启动定位​​:通过 requestOnce 发起单次定位请求,监听 ON_LOCATION_REPORT 事件获取位置数据(包含经纬度和地址);
    • ​城市解析​​:若地址信息中直接包含城市(locationData.address.city),则直接返回;否则需通过经纬度调用逆地理编码API(如高德/百度地图服务)解析城市(示例中简化为提示坐标);
  • ​用户交互​​:通过 Toast 提示定位成功或失败信息,引导用户处理权限拒绝场景。

​4.2.3 运行结果​

  • ​首次运行​​:用户点击“获取当前城市”时,系统弹出授权弹窗请求“位置权限”,用户确认后应用启动GPS定位;
  • ​定位成功​​:若地址信息中包含城市(如“北京市”),显示Toast“当前城市:北京市”;
  • ​定位失败​​:若权限未授予,提示“需要位置权限才能获取当前城市,请前往设置中开启”;若定位服务异常,显示错误信息(如“定位失败:GPS信号弱”)。

​4.3 典型场景2:逆地理编码解析城市(结合第三方API)​

​4.3.1 场景描述​

若鸿蒙本地化服务未直接返回城市信息(仅返回经纬度),开发者需调用第三方地图服务(如高德API、百度API)通过逆地理编码将经纬度转换为城市名称。

​4.3.2 代码实现(核心逻辑扩展)​

(在 getCurrentCity 方法中,若 locationData.address.city 为空,则调用高德API:

// 示例:调用高德逆地理编码API(需替换为真实API Key)
private async reverseGeocode(latitude: number, longitude: number): Promise<string> {
  const apiKey = 'YOUR_AMAP_API_KEY'; // 高德开发者Key
  const url = `https://restapi.amap.com/v3/geocode/regeo?key=${apiKey}&location=${longitude},${latitude}&output=json`;
  
  try {
    const response = await fetch(url);
    const data = await response.json();
    if (data.status === '1' && data.regeocode?.addressComponent?.city) {
      return data.regeocode.addressComponent.city; // 如“北京市”
    } else {
      throw new Error('逆地理编码失败:' + (data.info || '未知错误'));
    }
  } catch (error: any) {
    throw new Error(`调用逆地理编码API失败:${error.message}`);
  }
}

requestOnce 的回调中,若 locationData.address.city 为空,则调用 reverseGeocode(latitude, longitude) 解析城市。)


5. 原理解释

​5.1 位置服务获取当前城市的核心工作流程​

  1. ​权限声明​​:开发者在 module.json5 中明确列出 ohos.permission.LOCATION 权限,并向用户说明用途;
  2. ​权限校验​​:在调用定位API前,通过 permissions.verifySelfPermission 检查权限是否已授予,避免未授权操作;
  3. ​动态申请​​:若权限未授予,通过 permissions.requestPermissionsFromUser 弹出系统授权弹窗,用户确认后获得授权;
  4. ​定位配置​​:通过 LocationManager 创建定位请求,设置定位模式(如高精度GPS)、是否需要地址信息、单次/持续定位等参数;
  5. ​定位触发​​:发起单次定位请求(requestOnce)或持续监听定位更新(requestContinuous),获取用户的经纬度坐标;
  6. ​城市解析​​:若定位结果中直接包含地址信息(如鸿蒙本地化服务已解析城市),则直接提取;否则通过逆地理编码API(如高德/百度)将经纬度转换为城市名称;
  7. ​结果反馈​​:将解析后的城市名称展示给用户,或用于后续业务逻辑(如推荐周边服务)。

​5.2 核心特性总结​

特性 说明 典型应用场景
​权限驱动​ 必须通过用户授权(ohos.permission.LOCATION)才能调用定位硬件 所有需要位置信息的应用
​多定位方式​ 支持GPS(高精度)、Wi-Fi(中精度)、基站(低精度)混合定位 不同场景下的精度与功耗平衡
​地址解析​ 直接获取地址信息(含城市)或通过逆地理编码解析经纬度到城市 需要语义化位置信息的应用
​低功耗设计​ 可配置单次定位或低频率更新,减少GPS持续开启的电量消耗 后台任务或非实时场景
​安全性​ 未授权时禁止访问位置信息,防止恶意应用追踪用户位置 所有涉及用户隐私的场景

6. 原理流程图及原理解释

​6.1 位置服务获取当前城市的完整流程图​

sequenceDiagram
    participant 用户 as 用户
    participant 应用 as HarmonyOS应用(ArkTS)
    participant 系统 as 鸿蒙系统(权限管理+定位服务)
    participant GPS as GPS硬件/网络定位

    用户->>应用: 点击“获取当前城市”按钮
    应用->>应用: 检查位置权限是否已授予(verifySelfPermission)
    alt 权限已授予
      应用->>系统: 获取定位管理器(getLocationManager)
      应用->>系统: 配置定位参数(高精度GPS,单次定位,需地址)
      应用->>GPS: 发起定位请求(requestOnce)
      GPS-->>应用: 返回经纬度和地址信息(含城市)
      应用->>用户: 显示当前城市(如“北京市”)
    else 权限未授予
      应用->>系统: 动态申请位置权限(requestPermissionsFromUser)
      系统->>用户: 弹出授权弹窗(“是否允许访问位置?”)
      用户->>系统: 选择“允许”或“拒绝”
      系统->>应用: 返回授权结果(true/false)
      alt 用户允许
        应用->>系统: 重复权限检查后的流程(定位并解析城市)
      else 用户拒绝
        应用->>用户: 提示“需要位置权限才能获取当前城市”
      end
    end

​6.2 原理解释​

  • ​用户触发​​:用户通过UI操作(如点击按钮)发起获取当前城市的请求;
  • ​权限校验​​:应用优先检查权限状态,若已授予则直接进入定位流程;
  • ​动态申请​​:若权限未授予,系统弹出授权弹窗,用户确认后应用获得 LOCATION 权限;
  • ​定位配置​​:应用通过 LocationManager 设置定位参数(如高精度GPS、单次定位、需地址信息),系统根据配置选择最优的定位方式(优先GPS,若无信号则切换Wi-Fi/基站);
  • ​定位触发​​:发起单次定位请求,GPS硬件或网络定位服务返回用户的经纬度坐标及可能的地址信息;
  • ​城市解析​​:若地址信息中直接包含城市(如鸿蒙本地化服务已解析),则直接提取并显示;否则调用逆地理编码API(如高德/百度)将经纬度转换为城市名称;
  • ​结果反馈​​:将解析后的城市名称通过Toast或UI组件展示给用户,完成整个流程。

7. 实际详细应用代码示例(综合案例:天气APP)

​7.1 场景描述​

天气类应用需获取用户当前所在城市,根据城市名称调用天气API(如中国气象局、心知天气)显示实时天气和预报。通过集成位置服务获取城市,为用户提供个性化的天气信息。

​7.2 代码实现(核心逻辑复用)​

(基于4.2.1的代码,扩展天气显示逻辑:在获取城市后,调用天气API(伪代码):

// 在getCurrentCity成功后,调用天气API
this.getCurrentCity().then((city) => {
  this.fetchWeather(city); // 根据城市获取天气数据
});

private async fetchWeather(city: string) {
  const weatherApiUrl = `https://api.weather.com/v1/city/${city}/current`; // 伪API
  try {
    const response = await fetch(weatherApiUrl);
    const weatherData = await response.json();
    console.info(`当前城市${city}的天气:${weatherData.description}`);
  } catch (error) {
    console.error('获取天气失败:', error);
  }
}


8. 运行结果

​8.1 基础场景(权限申请与城市获取)​

  • ​首次运行​​:用户点击“获取当前城市”时,系统弹出授权弹窗,用户确认后显示Toast“当前城市:北京市”(假设GPS定位成功且地址信息包含城市);
  • ​未授权场景​​:用户拒绝权限后,提示“需要位置权限才能获取当前城市,请前往设置中开启”;
  • ​定位失败​​:若GPS信号弱或服务异常,显示错误信息(如“定位失败:请检查GPS设置”)。

​8.2 扩展场景(逆地理编码)​

  • 若鸿蒙本地化服务未返回城市,通过高德API将经纬度(如 39.9042, 116.4074)解析为“北京市”,并显示给用户。

9. 测试步骤及详细代码

​9.1 基础功能测试​

  1. ​权限校验​​:卸载应用后重新安装,首次点击“获取当前城市”时检查是否弹出授权弹窗;
  2. ​定位功能​​:授权后验证是否能正确显示当前城市(或经纬度坐标);
  3. ​拒绝场景​​:用户拒绝权限后,检查是否提示“功能不可用”或引导去设置页。

​9.2 边界测试​

  1. ​无GPS信号​​:在室内或地下场景测试,验证是否通过Wi-Fi/基站定位(精度可能降低);
  2. ​多城市切换​​:用户移动到不同城市后,重新获取定位验证城市是否更新。

10. 部署场景

​10.1 生产环境部署​

  • ​权限配置​​:确保 module.json5 中仅声明必要的 LOCATION 权限,并提供清晰的用户说明;
  • ​用户引导​​:在权限拒绝时,提供“去设置”按钮(实际项目中调用系统API跳转到应用权限页);
  • ​兼容性测试​​:在不同鸿蒙设备(如手机、平板、智能手表)上测试GPS/Wi-Fi/基站定位的兼容性。

​10.2 适用场景​

  • ​生活服务类应用​​:外卖、打车、天气预报;
  • ​导航类应用​​:地图、出行规划;
  • ​社交类应用​​:附近的人、活动推荐。

11. 疑难解答

​11.1 问题1:权限申请弹窗未弹出​

  • ​可能原因​​:未正确调用 requestPermissionsFromUser,或权限已在 module.json5 中声明但未动态申请;
  • ​解决方案​​:检查代码中是否调用了动态申请方法,并确认 module.json5 中的权限名称拼写正确(ohos.permission.LOCATION)。

​11.2 问题2:定位返回无城市信息​

  • ​可能原因​​:鸿蒙本地化服务未解析地址,或定位精度不足(如仅获取到经纬度);
  • ​解决方案​​:调用逆地理编码API(如高德/百度)将经纬度转换为城市名称,或检查定位参数是否配置了 needAddress: true

​11.3 问题3:GPS信号弱导致定位失败​

  • ​可能原因​​:用户处于室内或GPS被关闭;
  • ​解决方案​​:提示用户“GPS信号弱,请前往开阔区域”,或切换为Wi-Fi/基站定位(降低精度但提高成功率)。

12. 未来展望

​12.1 技术趋势​

  • ​多源定位融合​​:未来鸿蒙可能进一步优化GPS、Wi-Fi、基站的混合定位算法,提升室内定位精度;
  • ​隐私增强​​:引入“模糊定位”机制(如仅返回城市级而非街道级坐标),在保障功能的同时减少用户隐私泄露风险;
  • ​低功耗定位​​:通过AI预测用户移动轨迹,动态调整定位频率(如静止时降低更新频率),延长设备续航;
  • ​跨设备协同​​:鸿蒙生态中,手机、平板、智能穿戴等设备的定位信息共享(如手表同步手机的当前城市)。

​12.2 挑战​

  • ​多设备兼容性​​:不同鸿蒙设备的GPS硬件性能、Wi-Fi模块支持程度可能不同,需适配多种定位方式;
  • ​用户教育​​:部分用户可能拒绝位置权限导致功能受限,需开发者通过UI设计引导用户理解必要性;
  • ​法规合规​​:不同地区对位置信息的收集和使用有严格法规(如GDPR),需确保应用符合当地法律要求。

​13. 总结​

鸿蒙位置服务通过 ​​原生的 @ohos.location 模块和 ohos.permission.LOCATION 权限​​,实现了对GPS、Wi-Fi、基站等多种定位方式的统一管理,开发者可通过简单的API调用获取用户的经纬度坐标,并进一步解析为城市等语义化信息。本文通过 ​​技术背景、应用场景(天气/导航)、代码示例(ArkTS)、原理解释(流程图)、环境准备及疑难解答​​ 的全面解析,揭示了:

  • ​核心原理​​:基于动态权限申请和分级定位策略,通过用户交互获取位置信息,平衡精度与功耗;
  • ​最佳实践​​:优先申请必要权限、配置合适的定位参数(如单次高精度定位)、通过逆地理编码解析城市;
  • ​技术扩展​​:多源定位融合、隐私增强和低功耗优化是未来的发展方向;
  • ​未来方向​​:随着鸿蒙生态的成熟,位置服务将成为连接物理世界与数字体验的核心能力,助力开发者构建更智能、个性化的应用。

掌握位置服务技术,开发者能够为用户提供基于位置的精准服务(如导航、周边推荐),提升应用的价值与竞争力,在鸿蒙平台上实现更广泛的应用场景。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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