HarmonyOS鸿蒙Next中图片无法deleteAssets删除

HarmonyOS鸿蒙Next中图片无法deleteAssets删除

import { Permissions } from '@kit.AbilityKit'
import { dataSharePredicates } from '@kit.ArkData'
import { promptAction } from '@kit.ArkUI'
import { photoAccessHelper } from '@kit.MediaLibraryKit'
import { permissionManager } from '.'

class CleanerManager {
  // 权限
  private permissions: Permissions[] = ["ohos.permission.READ_IMAGEVIDEO", "ohos.permission.WRITE_IMAGEVIDEO"]
  // 图片资源
  private photoAssets: photoAccessHelper.PhotoAsset[] = []
  // 图片字段
  private columns: photoAccessHelper.PhotoKeys[] = [
    photoAccessHelper.PhotoKeys.DATE_ADDED,
    photoAccessHelper.PhotoKeys.SIZE,
  ]

  // 图片权限
  async requestPermissions() {
    try {
      // 申请权限
      await permissionManager.requestPermissions(this.permissions)
    } catch {
      // 未开启弹窗提示
      const dialogRes = await promptAction.showDialog({
        alignment: DialogAlignment.Center,
        title: '温馨提示',
        message: '手机瘦身功能需要获取权限,请在系统设置中打开相册开关',
        buttons: [
          { text: '取消', color: $r('app.color.font_sub') },
          { text: '立即开启', color: $r('app.color.brand') }
        ]
      })
      // 打开设置页
      if (dialogRes.index === 1) {
        permissionManager.openPermissionSettingsPage()
      }
    }
  }

  // 获取图片/视频
  async getAssets() {
    const context = getContext()
    const phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context) // 获取照片访问助手
    const predicates = new dataSharePredicates.DataSharePredicates() // 创建数据共享断言
    const fetchOption: photoAccessHelper.FetchOptions = {
      fetchColumns: this.columns,
      predicates: predicates
    }
    const assets = await phAccessHelper.getAssets(fetchOption) // 获取资源
    const photoAssets = await assets.getAllObjects() // 获取所有图片
    return photoAssets
  }

  // 获取屏幕截图列表
  async getScreenshotList() {
    const photoAssets = await this.getAssets()
    return photoAssets.filter(item => item.displayName.includes('screenshot'))
  }

  // 获取视频列表
  async getVideoList() {
    const photoAssets = await this.getAssets()
    return photoAssets.filter(item => item.photoType === photoAccessHelper.PhotoType.VIDEO)
  }

  // 删除图片
  async deletePhotos(uris: string[]) {
    const photoAssets = await this.getAssets() 
    const deleteAssets = photoAssets.filter(v => uris.includes(v.uri))
    await photoAccessHelper.MediaAssetChangeRequest.deleteAssets(getContext(), deleteAssets)
  }
}

export const cleanerManager = new CleanerManager()

有没有大佬可以解答一下,我删除图片无法完成


更多关于HarmonyOS鸿蒙Next中图片无法deleteAssets删除的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

没获取到,应该是需要的权限没有拿到。可以参考以下链接,推荐使用安全控件去获取图片或视频文件

ohos.permission.READ_IMAGEVIDEO

ohos.permission.WRITE_IMAGEVIDEO

更多关于HarmonyOS鸿蒙Next中图片无法deleteAssets删除的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


还是没用,是不是模拟器的问题?

const photoAssets = await this.getAssets()

问题出在了这里,这里获取不到

解决了吗
我这一步能获取的到 但是还是删除不成功,

在HarmonyOS鸿蒙Next中,deleteAssets方法用于删除应用中的资源文件。如果图片无法通过deleteAssets删除,可能是以下原因:

  1. 文件路径错误:确保传入的文件路径正确,路径应相对于resources目录。

  2. 文件被占用:如果图片文件正在被其他进程或线程使用,删除操作会失败。确保文件未被占用。

  3. 权限问题:应用可能没有删除该文件的权限。检查应用的权限设置。

  4. 文件不存在:如果文件不存在,删除操作会失败。确保文件存在。

  5. 系统限制:某些系统资源文件可能受保护,无法删除。

  6. 缓存问题:如果文件被缓存,可能需要先清除缓存再删除。

  7. API限制:某些API可能不支持删除特定类型的文件。

  8. 文件系统问题:文件系统可能存在问题,导致删除操作失败。

  9. 版本兼容性:不同版本的HarmonyOS可能存在API行为差异,检查API文档。

  10. 日志信息:查看日志信息,获取更多错误详情。

以上是可能导致图片无法通过deleteAssets删除的原因。

在HarmonyOS鸿蒙Next中,deleteAssets方法用于删除应用包内的资源文件。如果图片无法删除,可能原因包括:

  1. 文件路径错误;
  2. 文件被其他进程占用;
  3. 权限不足。

请检查文件路径是否正确,确保文件未被占用,并确认应用具有删除权限。如果问题依旧,建议使用File类的delete方法进行删除操作。

回到顶部