【救命!点击按钮无反应】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

5 回复

可以提供下日志信息

更多关于【救命!点击按钮无反应】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管理媒体文件时,若点击按钮无反应且无法将媒体图片放入回收站,可能是以下原因:

  1. 权限问题:确保应用已获取ohos.permission.WRITE_MEDIAohos.permission.READ_MEDIA权限,并在config.json中正确声明。

  2. API使用错误:检查是否正确使用MediaLibrarydeleteAsset方法。示例代码如下:

    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");
            }
        });
    }
    
  3. 资源未释放:确保在操作完成后释放MediaLibrary实例,避免资源泄漏。

  4. 系统限制:某些系统文件夹或文件可能受保护,无法直接删除。

  5. 回调处理:检查是否正确处理了删除操作的回调函数,确保在删除成功或失败时有相应的日志输出。

  6. 设备兼容性:确认设备是否支持Media Library Kit的相关功能。

  7. 日志排查:通过HiLog查看详细日志,定位问题。

若以上步骤均无误,问题可能出在系统或API的特定限制上。

在HarmonyOS鸿蒙Next中,若无法将媒体图片放入回收站,可能是以下原因:

  1. 权限问题,确保应用已获取ohos.permission.WRITE_MEDIA权限;

  2. 文件路径错误,检查图片路径是否正确;

  3. 回收站功能未启用,确认系统回收站功能是否正常。

建议使用MediaLibrary API中的deleteAsset方法,将文件标记为删除状态,系统会自动将其移至回收站。

回到顶部