【ARKUI-媒体库管理】基于HarmonyOS鸿蒙Next 3.0 API8真机,获取手机相册照片时,照片的url打印出来是乱码,导致无法在Image组件正常显示

【ARKUI-媒体库管理】基于HarmonyOS鸿蒙Next 3.0 API8真机,获取手机相册照片时,照片的url打印出来是乱码,导致无法在Image组件正常显示 贴上文档链接:https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-medialibrary-0000001281001130

贴上我的代码:

import router from '@ohos.router'
import multimedia_mediaLibrary from '@ohos.multimedia.mediaLibrary'
import featureAbility from '@ohos.ability.featureAbility'
import { Logger } from '../model/Logger'
const PERMISSIONS: Array<string> =
[
  'ohos.permission.MEDIA_LOCATION',
  'ohos.permission.READ_MEDIA',
  'ohos.permission.WRITE_MEDIA'
]
const TAG : string = '[Test]'

@Component
struct Test {

  @State imgDatas: Array<multimedia_mediaLibrary.FileAsset> = []

  async aboutToAppear() {
    let permissionState = 666 //  传递给返回结果的请求代码
    let context = featureAbility.getContext()
    let result = await context.requestPermissionsFromUser(PERMISSIONS, permissionState)
    console.info(`[fengzi]grantPermission requestPermissionsFromUser result.requestCode = ${JSON.stringify(result)}`)
    let media = await multimedia_mediaLibrary.getMediaLibrary(context)

    let fileKeyObj = multimedia_mediaLibrary.FileKey
    let fetchOp = {
      selections: fileKeyObj.MEDIA_TYPE + '=?',
      selectionArgs: [multimedia_mediaLibrary.MediaType.IMAGE.toString()],
    }
    let fetchFileResult = await media.getFileAssets(fetchOp)
    console.info(`[fengzi]getAllImg getFileAssetsFromType fetchFileResult.count = ${fetchFileResult.getCount()}`)
    this.imgDatas = await fetchFileResult.getAllObject()
    await media.release()
    this.imgDatas.splice(5,this.imgDatas.length-1)
    for (let index = 0; index < this.imgDatas.length; index++) {
      console.info(`[fengzi]this.imgDatas ${JSON.stringify(this.imgDatas[index].id)} uri = ${JSON.stringify(this.imgDatas[index].uri)}`)
    }
  }

  build() {
    Column() {
      Scroll() {
        Grid() {
          ForEach(this.imgDatas, item => {
            GridItem() {
              Image(item.uri)
                .aspectRatio(1.4)
                .objectFit(ImageFit.Contain)
                .onClick(() => {
                })
            }
          }, item => JSON.stringify(item))
        }
        .backgroundColor('#e5e5e5')
        .margin({ top: 4, bottom: 2, left: 4, right: 4 })
        .maxCount(2)
        .width('100%')
        .height('100%')
        .rowsGap('2%')
        .columnsGap('1%')
        .columnsTemplate('1fr 1fr')
      }
      .width('100%')
      .layoutWeight(1)
      .scrollable(ScrollDirection.Vertical)
    }.width('100%').height('100%')
  }
}

贴上日志:见附件


更多关于【ARKUI-媒体库管理】基于HarmonyOS鸿蒙Next 3.0 API8真机,获取手机相册照片时,照片的url打印出来是乱码,导致无法在Image组件正常显示的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

开发者您好,经分析,OpenHarmony提供的API接口正常可用。您可以自行debug调试看看哪里逻辑处理有问题。

更多关于【ARKUI-媒体库管理】基于HarmonyOS鸿蒙Next 3.0 API8真机,获取手机相册照片时,照片的url打印出来是乱码,导致无法在Image组件正常显示的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你好,为什么现在通过:

mediaLibrary.getMediaLibrary

代码提示:

Property 'getMediaLibrary' does not exist on type 'typeof mediaLibrary'.

这个如何处理?

我已经导入了:

import mediaLibrary from '@ohos.multimedia.mediaLibrary'

你好,为什么现在通过:mediaLibrary.getMediaLibrary,代码提示:Property ‘getMediaLibrary’ does not exist on type ‘typeof mediaLibrary’. <tsCheck> 这个如何处理? 我已经导入了:import mediaLibrary from ‘@ohos.multimedia.mediaLibrary’

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

开发者您好,该问题已反馈给技术人员分析处理,有结果将第一时间通知您!

你好,为什么现在通过:

mediaLibrary.getMediaLibrary,代码提示:Property ‘getMediaLibrary’ does not exist on type ‘typeof mediaLibrary’.

这是如何处理? 我已经导入了:

import mediaLibrary from '@ohos.multimedia.mediaLibrary'

在HarmonyOS鸿蒙Next 3.0 API8中,获取手机相册照片时,照片的URL打印出来是乱码,可能是由于URL编码问题或媒体库管理API返回的数据格式不正确所致。可以尝试以下方法解决:

  1. 检查URL编码:确保获取的URL已经正确解码。可以使用decodeURIComponentdecodeURI方法对URL进行解码,确保其格式正确。

  2. 验证API返回数据:检查媒体库管理API返回的数据格式是否符合预期。确保返回的URL是有效的,且可以通过Image组件加载。

  3. 使用正确的API:确保使用的是@ohos.multimedia.mediaLibrary中的getMediaAssetsgetFileAssets方法获取媒体资源,并正确解析返回的URI。

  4. 检查权限:确保应用已经获取了访问媒体库的权限(ohos.permission.READ_MEDIA),否则可能导致无法正确获取资源。

  5. 调试日志:在获取URL后,打印其原始值和解码后的值,确保URL格式正确。

如果以上方法未能解决问题,可能需要进一步检查API的使用方式或等待鸿蒙系统的更新修复。

在HarmonyOS鸿蒙Next 3.0 API8中,获取相册照片的URL出现乱码可能是由于编码问题或URL格式不正确导致的。建议检查以下几点:

  1. 编码问题:确保在获取URL时使用正确的编码方式,如UTF-8。
  2. URL格式:确认获取的URL是否符合标准格式,可能需要使用decodeURIComponent进行解码。
  3. 权限检查:确保应用已获取访问媒体库的权限。
  4. API使用:检查是否正确使用了PhotoAccessHelper相关API。

如果问题依旧,建议参考官方文档或社区论坛获取更多帮助。

回到顶部