HarmonyOSNext应用服务能力应用

57 阅读2分钟

获取此刻地理位置

import { geoLocationManager } from '@kit.LocationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';

const request: geoLocationManager.SingleLocationRequest = {
  'locatingPriority': geoLocationManager.LocatingPriority.PRIORITY_LOCATING_SPEED,
  'locatingTimeoutMs': 10000
}
const permissions: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION', 'ohos.permission.LOCATION'];

@Entry
@Component
struct Location {
  @State locationText: string = '测试';

  reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext): void {
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
    atManager.requestPermissionsFromUser(context, permissions).then((data) => {
      let grantStatus: Array<number> = data.authResults;
      let length: number = grantStatus.length;
      for (let i = 0; i < length; i++) {
        if (grantStatus[i] === 0) {
          // 用户授权,可以继续访问目标操作
          geoLocationManager.getCurrentLocation(request)
            .then((result) => { // 调用getCurrentLocation获取当前设备位置,通过promise接收上报的位置
              console.log('current location: ' + JSON.stringify(result));
              this.locationText = JSON.stringify(result);
              //通过得到的坐标位置调用逆地理编码服务转为地址 x86模拟器不支持
              geoLocationManager.getAddressesFromLocation(result, (err, data) => {
                if (err) {
                  console.log('getAddressesFromLocation err: ' + JSON.stringify(err));
                } else {
                  console.log('getAddressesFromLocation data: ' + JSON.stringify(data));
                }
              });
            })
            .catch((error: BusinessError) => { // 接收上报的错误码
              console.error('promise, getCurrentLocation: error=' + JSON.stringify(error));
            });

        } else {
          // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
          return;
        }
      }
      // 授权成功
    }).catch((err: BusinessError) => {
      console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
    })
  }

  build() {
    Column() {
      Text(this.locationText)
      Button('获取当前位置信息')
        .onClick(() => {
          try {
            const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
            this.reqPermissionsFromUser(permissions, context);
          } catch (err) {
            console.error("errCode:" + JSON.stringify(err));
          }
        })
    }
    .width('100%')
    .height('100%')
  }
}

调用AI能力(文字识别)

import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { image } from '@kit.ImageKit';
import { fileIo } from '@kit.CoreFileKit';
import { textRecognition } from '@kit.CoreVisionKit';

@Entry
@Component
struct Index {
  @State imageSource: image.ImageSource | undefined = undefined;
  @State chooseImage: PixelMap | undefined = undefined;
  @State dataValues: string = ''

  async aboutToAppear(): Promise<void> {
    const initResult = await textRecognition.init();
    hilog.info(0x0000, 'textRecognitionSample', `OCR service initialization result:david`);
    hilog.info(0x0000, 'OCRDemo', `Succeeded david text-1`);
    console.log("first page");
  }

  async aboutToDisappear(): Promise<void> {
    await textRecognition.release();
    hilog.info(0x0000, 'textRecognitionSample', 'OCR service released successfully');
  }

  build() {
    Column() {
      Image(this.chooseImage)
        .objectFit(ImageFit.Fill)
        .width('100%')
        .height('60%')
        .padding(20)
      Button('选择图片')
        .type(ButtonType.Capsule)
        .fontColor(Color.White)
        .alignSelf(ItemAlign.Center)
        .width('80%')
        .margin(20)
        .onClick(() => {
          // 拉起图库,获取图片资源
          this.selectImage()
        })
      Button('开始识别')
        .type(ButtonType.Capsule)
        .fontColor(Color.White)
        .backgroundColor(Color.Black)
        .alignSelf(ItemAlign.Center)
        .width('80%')
        .margin(10)
        .onClick(() => {
          // 调用文字识别
          this.initAndReleaseOCR()
        })
      Text(`显示上传图片的路径${this.imageSource}`)
      if (this.dataValues) {
        Text(`文字识别结果${this.dataValues}`)
      }
    }
    .width('100%').height('100%')
    .backgroundColor('#ccc')
  }

  // 打开相册
  openPhoto(): Promise<string> {
    return new Promise<string>((resolve) => {
      let photoPicker: photoAccessHelper.PhotoViewPicker = new photoAccessHelper.PhotoViewPicker();
      photoPicker.select({
        MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,
        maxSelectNumber: 1
      }).then((res: photoAccessHelper.PhotoSelectResult) => {
        resolve(res.photoUris[0]);
      }).catch((err: BusinessError) => {
        hilog.error(0x0000, 'OCRDemo', `Failed to get photo image uri. code:${err.code},message:${err.message}`);
        resolve('');
      })
    })
  }

  // 选择图片
  async selectImage() {
    let uri = await this.openPhoto();
    if (uri === undefined) {
      hilog.error(0x0000, 'OCRDemo', "Failed to get uri.");
      return;
    }
    console.log("********david", uri)
    this.loadImage(uri);
  }

  //加载图片 并将图片转换为PixelMap
  loadImage(name: string) {
    setTimeout(async () => {
      let fileSource = await fileIo.open(name, fileIo.OpenMode.READ_ONLY);
      this.imageSource = image.createImageSource(fileSource.fd);
      this.chooseImage = await this.imageSource.createPixelMap();
      hilog.info(0x0000, 'OCRDemo', `Succeeded david text:${this.chooseImage}`);
      await textRecognition.init();
    }, 100)
  }

  async initAndReleaseOCR() {
    // 初始化 OCR 服务
    hilog.info(0x0000, 'textRecognitionSample', `OCR service initialization result0`);
    let initResult = await textRecognition.init(); //这里有问题后续处理
    hilog.info(0x0000, 'textRecognitionSample', `OCR service initialization result:${initResult}`);

    if (initResult) {
      hilog.info(0x0000, 'textRecognitionSample', 'OCR service initialized successfully');

      // 这里可以添加使用 OCR 服务的代码
      // 例如: await textRecognition.recognizeText(...);
      await this.textRecognitionTest()
      // 使用完毕后,释放 OCR 服务
      await textRecognition.release();
      hilog.info(0x0000, 'textRecognitionSample', 'OCR service released successfully');
    } else {
      hilog.error(0x0000, 'textRecognitionSample', 'Failed to initialize OCR service');
    }
  }

  // 调用文字识别接口进行识别
  async textRecognitionTest() {
    if (!this.chooseImage) {
      return;
    }
    // 调用文本识别接口
    let visionInfo: textRecognition.VisionInfo = {
      pixelMap: this.chooseImage
    };
    let textConfiguration: textRecognition.TextRecognitionConfiguration = {
      isDirectionDetectionSupported: false
    };
    await textRecognition.recognizeText(visionInfo, textConfiguration)
      .then((data: textRecognition.TextRecognitionResult) => {
        hilog.info(0x0000, 'OCRDemo', `Succeeded david text1`);
        // 识别成功,获取对应的结果
        let recognitionString = JSON.stringify(data);
        hilog.info(0x0000, 'OCRDemo', `Succeeded in recognizing text:${recognitionString}`);
        // 将结果更新到Text中显示
        this.dataValues = data.value;
        if (this.chooseImage && this.imageSource) {
          this.chooseImage.release();
          this.imageSource.release();
        }
      })
      .catch((error: BusinessError) => {
        hilog.info(0x0000, 'OCRDemo', `Succeeded david text2`);
        hilog.error(0x0000, 'OCRDemo', `Failed to recognize text. Code: ${error.code}, message: ${error.message}`);
        this.dataValues = `Error: ${error.message}`;
      });
  }
}

调用地图服务能力

网络请求能力