【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
开发者您好,经分析,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返回的数据格式不正确所致。可以尝试以下方法解决:
-
检查URL编码:确保获取的URL已经正确解码。可以使用
decodeURIComponent
或decodeURI
方法对URL进行解码,确保其格式正确。 -
验证API返回数据:检查媒体库管理API返回的数据格式是否符合预期。确保返回的URL是有效的,且可以通过
Image
组件加载。 -
使用正确的API:确保使用的是
@ohos.multimedia.mediaLibrary
中的getMediaAssets
或getFileAssets
方法获取媒体资源,并正确解析返回的URI。 -
检查权限:确保应用已经获取了访问媒体库的权限(
ohos.permission.READ_MEDIA
),否则可能导致无法正确获取资源。 -
调试日志:在获取URL后,打印其原始值和解码后的值,确保URL格式正确。
如果以上方法未能解决问题,可能需要进一步检查API的使用方式或等待鸿蒙系统的更新修复。
在HarmonyOS鸿蒙Next 3.0 API8中,获取相册照片的URL出现乱码可能是由于编码问题或URL格式不正确导致的。建议检查以下几点:
- 编码问题:确保在获取URL时使用正确的编码方式,如UTF-8。
- URL格式:确认获取的URL是否符合标准格式,可能需要使用
decodeURIComponent
进行解码。 - 权限检查:确保应用已获取访问媒体库的权限。
- API使用:检查是否正确使用了
PhotoAccessHelper
相关API。
如果问题依旧,建议参考官方文档或社区论坛获取更多帮助。