HarmonyOS鸿蒙Next中如何将datashare:///media/image/52转换为dataability:///以便在Image显示?

HarmonyOS鸿蒙Next中如何将datashare:///media/image/52转换为dataability:///以便在Image显示?

请问如何将图片路径由datashare转换成dataability

下面的Image使用datashare会报错,因为不支持。而我获取到的图片路径是datashare:///media/image/52

this.img=dataability:///media/external/images/media/52
//      Image(this.img)
//        .size({ width: 100, height: 100 })
//        .aspectRatio(1)
//        .borderRadius(10)
//        .objectFit(ImageFit.Fill)

更多关于HarmonyOS鸿蒙Next中如何将datashare:///media/image/52转换为dataability:///以便在Image显示?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

楼主您好,datashare链接暂不支持转换成转换成dataability

更多关于HarmonyOS鸿蒙Next中如何将datashare:///media/image/52转换为dataability:///以便在Image显示?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


Mate60 4.0.0.138, 可以显示出图片

import picker from '@ohos.file.picker';
import image from '@ohos.multimedia.image';
import fs from '@ohos.file.fs';
import util from '@ohos.util';
import common from '@ohos.app.ability.common';
import wantConstant from '@ohos.ability.wantConstant';

@Entry
@Component
struct Index {
  @State message: string = '选择图片'
  @State icon: PixelMap = null
  @State base64: string = ''
  @State uri: string = ''
  private context = this as common.UIAbilityContext;

  onPageShow() {}

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(click => {
            let wantInfo = {
              deviceId: '', // deviceId为空表示本设备
              action: wantConstant.Action.ACTION_IMAGE_CAPTURE,
              parameters: { // 自定义信息
              },
            }
            this.context.startAbilityForResult(wantInfo).then(data => {
              // ...
              this.uri = data.want.uri;
            }).catch(err => {
              // ...
            })
          })
        
        Image(this.uri)
          .width(200)
          .height(200)
          .margin({ top: 100 })
          .objectFit(ImageFit.Contain)
      }
      .width('100%')
    }
    .height('100%')
  }
}

Compile SDK 3.1.0(API9) harmonyos

在HarmonyOS鸿蒙Next中,datashare:///media/image/52dataability:/// 是两种不同的URI协议,分别用于访问共享数据和DataAbility数据。要将 datashare:///media/image/52 转换为 dataability:///,可以通过以下步骤实现:

  1. 解析 datashare:///media/image/52:首先,解析该URI,获取其中的路径信息 /media/image/52

  2. 构建 dataability:/// URI:根据解析出的路径信息,构建新的 dataability:/// URI。例如,dataability:///com.example.provider/media/image/52,其中 com.example.provider 是DataAbility的提供者标识。

  3. 使用DataAbility访问数据:通过构建的 dataability:/// URI,使用DataAbility的API来访问和获取图像数据。

  4. 在Image组件中显示:将获取到的图像数据传递给Image组件进行显示。

具体代码示例如下:

import featureAbility from '@ohos.ability.featureAbility';

// 解析datashare URI
let datashareUri = 'datashare:///media/image/52';
let path = datashareUri.split('///')[1];

// 构建dataability URI
let dataabilityUri = `dataability:///com.example.provider/${path}`;

// 使用DataAbility获取图像数据
let fileDescriptor = featureAbility.openFile(dataabilityUri, 'r');
let imageData = // 从fileDescriptor中读取图像数据

// 在Image组件中显示
<Image src={imageData} />

在HarmonyOS鸿蒙Next中,要将datashare:///media/image/52转换为dataability:///以便在Image组件中显示,可以按照以下步骤操作:

  1. 创建DataAbility:首先,确保你已经创建了一个DataAbility,用于处理媒体数据的访问。

  2. 实现URI转换:在DataAbility中,实现onCreate()方法,并在其中处理URI的转换逻辑。例如,将datashare:///media/image/52转换为dataability:///com.example.myapp/media/image/52

  3. 使用Image组件:在UI中使用Image组件,并将转换后的dataability:/// URI作为src属性值。例如:

    <Image src="dataability:///com.example.myapp/media/image/52" />
    
  4. 权限配置:确保在config.json中配置了相应的权限,以允许访问媒体数据。

通过以上步骤,你可以在Image组件中成功显示转换后的URI。

回到顶部