【救命!点击按钮无反应】HarmonyOS鸿蒙Next中无法实现将媒体图片放入回收站。-------------- Media Library Kit(媒体文件管理服务)
【救命!点击按钮无反应】HarmonyOS鸿蒙Next中无法实现将媒体图片放入回收站。-------------- Media Library Kit(媒体文件管理服务)
MediaKitTestPage
动态申请授权(首次弹窗申请)
import { Permissions, bundleManager, abilityAccessCtrl } from '@kit.AbilityKit';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
import dataSharePredicates from '@ohos.data.dataSharePredicates';
class PermissionManager {
/**
* 动态申请授权(首次弹窗申请)
*/
static async requestPermissions(permissions: Permissions[]) {
//核心代码:atManager.requestPermissionsFromUser()
// 1. 创建应用权限管理器
const atManager = abilityAccessCtrl.createAtManager();
// 2. 拉起弹框请求用户授权
const result = await atManager.requestPermissionsFromUser(getContext(), permissions)
// 上次理解有误,result对象的authResult属性是一个数组,数组存放的是请求权限的结果-1或者0
// 3. 处理请求权限的结果数组,每个元素是否都为 0 --- isAuth是true则代表允许授权,isAuth是返回false则代表禁止授权
const isAuth = result.authResults.every(v => v === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
// Promise.resolve(true)返回Promise成功
// Promise.reject(false)返回Promise错误,让await后续代码不被执行, Promise.reject可以被catch捕获
return isAuth === true ? Promise.resolve(true) : Promise.reject(false)
}
}
@Entry
@Component
struct MediaKitTestPage {
@State isAuth: boolean = false
async aboutToAppear() {
// 申请照片权限
this.requestPermissions()
}
// 申请照片权限
async requestPermissions() {
// 申请权限
this.isAuth = await PermissionManager.requestPermissions(
['ohos.permission.READ_IMAGEVIDEO', 'ohos.permission.WRITE_IMAGEVIDEO']
)
}
build() {
Column() {
Text('Media Library Kit(媒体文件管理服务-图库)')
Text('图库读写是否授权-isAuth: ' + this.isAuth)
.fontSize(50)
.fontWeight(FontWeight.Bold)
Button('删除图片')
.onClick(async () => {
// 1.建立检索条件,用于获取图片资源。
const phAccessHelper = photoAccessHelper.getPhotoAccessHelper(getContext())
// 2.调用PhotoAccessHelper.getAssets接口获取目标图片资源。
const predicates = new dataSharePredicates.DataSharePredicates()
const fetchResult = await phAccessHelper.getAssets({
fetchColumns: [],
predicates: predicates
})
// 3.调用FetchResult.getFirstObject接口获取第一张图片,即要放入回收站的图片对象。
const photoAsset = await fetchResult.getFirstObject()
// 4.调用MediaAssetChangeRequest.deleteAssets接口将文件放入回收站。
photoAccessHelper.MediaAssetChangeRequest.deleteAssets(getContext(), [photoAsset])
})
}
.height('100%')
.width('100%')
}
}
更多关于【救命!点击按钮无反应】HarmonyOS鸿蒙Next中无法实现将媒体图片放入回收站。-------------- Media Library Kit(媒体文件管理服务)的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可以提供下日志信息
更多关于【救命!点击按钮无反应】HarmonyOS鸿蒙Next中无法实现将媒体图片放入回收站。-------------- Media Library Kit(媒体文件管理服务)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
我找到原因了,我那版本的编辑器有bug,现在重新安装了最新版的编辑器就可以实现功能了。
deveco版本号:
- DevEco Studio NEXT Developer Beta3
- Build #DS-233.14475.28.36.503600
- 构建版本:5.0.3.600, built on August 7, 2024
- Runtime version: 17.0.10+1-b1087.17 amd64
- VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
- Windows 10.0
- GC: G1 Young Generation, G1 Old Generation
- Memory: 2048M
- Cores: 8
- Registry:
- idea.plugins.compatible.build=IC-233.14475.28
测试设备:
- 本地模拟器HarmonyOS NEXT Developer Beta3
姓名:张三
职业:软件工程师
简介:具有五年软件开发经验,熟悉Java、Python和C++。
在HarmonyOS鸿蒙Next中,使用Media Library Kit管理媒体文件时,若点击按钮无反应且无法将媒体图片放入回收站,可能是以下原因:
-
权限问题:确保应用已获取
ohos.permission.WRITE_MEDIA
和ohos.permission.READ_MEDIA
权限,并在config.json
中正确声明。 -
API使用错误:检查是否正确使用
MediaLibrary
的deleteAsset
方法。示例代码如下:let mediaLib = mediaLibrary.getMediaLibrary(context); let fileKeyObj = mediaLibrary.FileKey; let imageFile = mediaLib.getFileAssets({ selections: fileKeyObj.ID + "=?", selectionArgs: [imageId], }); if (imageFile.getCount() > 0) { let asset = imageFile.getFirstObject(); mediaLib.deleteAsset(asset.uri, (err) => { if (err) { console.error("Delete failed: " + err.message); } else { console.log("Delete successful"); } }); }
-
资源未释放:确保在操作完成后释放
MediaLibrary
实例,避免资源泄漏。 -
系统限制:某些系统文件夹或文件可能受保护,无法直接删除。
-
回调处理:检查是否正确处理了删除操作的回调函数,确保在删除成功或失败时有相应的日志输出。
-
设备兼容性:确认设备是否支持Media Library Kit的相关功能。
-
日志排查:通过
HiLog
查看详细日志,定位问题。
若以上步骤均无误,问题可能出在系统或API的特定限制上。
在HarmonyOS鸿蒙Next中,若无法将媒体图片放入回收站,可能是以下原因:
-
权限问题,确保应用已获取
ohos.permission.WRITE_MEDIA
权限; -
文件路径错误,检查图片路径是否正确;
-
回收站功能未启用,确认系统回收站功能是否正常。
建议使用MediaLibrary
API中的deleteAsset
方法,将文件标记为删除状态,系统会自动将其移至回收站。