HarmonyOS鸿蒙Next Flutter项目中,删除已保存到本地的媒体文件,如果想让文件进到系统相册的回收站,有什么接口可以调用吗?我们尝试了Android的接口creatTrashRequest,但是发现华为手机上不能生效

HarmonyOS鸿蒙Next Flutter项目中,删除已保存到本地的媒体文件,如果想让文件进到系统相册的回收站,有什么接口可以调用吗?我们尝试了Android的接口creatTrashRequest,但是发现华为手机上不能生效 【问题描述】:Flutter鸿蒙项目, 删除已保存到本地的媒体文件,如果想让文件进到系统相册的回收站,有什么接口可以调用吗? 我们尝试了Android的接口creatTrashRequest,但是发现华为手机上不能生效有什么解决方案吗

【问题现象】:Android的接口creatTrashRequest,但是发现华为手机上不能生效有什么解决方案吗

【版本信息】:DevStudio 6.0.0 Build Version: 6.0.0.858, built on September 24, 202

【复现代码】:无

【尝试解决方案】:未找到对应接口

cke_5159.jpeg


更多关于HarmonyOS鸿蒙Next Flutter项目中,删除已保存到本地的媒体文件,如果想让文件进到系统相册的回收站,有什么接口可以调用吗?我们尝试了Android的接口creatTrashRequest,但是发现华为手机上不能生效的实战教程也可以访问 https://www.itying.com/category-92-b0.html

4 回复

开发者您好,可以通过MediaAssetChangeRequest.deleteAssets接口可以将文件放入回收站。

放入回收站的文件将保存30天,到期后自动彻底删除。在此期间,用户可以通过系统应用“文件管理”或“图库”恢复文件。

如何使用Flutter与OpenHarmony通信 FlutterChannel参考链接如下:flutter_samples/ohos/docs/04_development/如何使用Flutter与OpenHarmony通信 FlutterChannel.md · OpenHarmony-TPC/flutter_samples - AtomGit | GitCode

更多关于HarmonyOS鸿蒙Next Flutter项目中,删除已保存到本地的媒体文件,如果想让文件进到系统相册的回收站,有什么接口可以调用吗?我们尝试了Android的接口creatTrashRequest,但是发现华为手机上不能生效的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


使用Python进行数据分析

环境准备

安装Python

首先,确保你的计算机上安装了Python。推荐使用Python 3.6或更高版本。

安装必要的库

使用pip安装数据分析常用的库:

pip install pandas numpy matplotlib seaborn jupyter

数据加载与查看

导入库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

读取数据

# 从CSV文件读取数据
df = pd.read_csv('data.csv')

# 查看数据前5行
print(df.head())

数据清洗

处理缺失值

# 检查缺失值
print(df.isnull().sum())

# 删除包含缺失值的行
df_cleaned = df.dropna()

# 或用均值填充缺失值
df_filled = df.fillna(df.mean())

处理重复值

# 删除重复行
df = df.drop_duplicates()

数据分析

描述性统计

# 获取数据的基本统计信息
print(df.describe())

# 计算特定列的统计量
mean_value = df['column_name'].mean()
median_value = df['column_name'].median()

数据分组

# 按列分组并计算平均值
grouped_data = df.groupby('category_column')['value_column'].mean()
print(grouped_data)

数据可视化

创建折线图

plt.figure(figsize=(10, 6))
plt.plot(df['date_column'], df['value_column'])
plt.title('数据趋势图')
plt.xlabel('日期')
plt.ylabel('数值')
plt.show()

创建柱状图

plt.figure(figsize=(10, 6))
plt.bar(df['category_column'], df['value_column'])
plt.title('类别对比图')
plt.xlabel('类别')
plt.ylabel('数值')
plt.show()

高级分析

相关性分析

# 计算相关系数矩阵
correlation_matrix = df.corr()
print(correlation_matrix)

# 可视化相关系数矩阵
plt.figure(figsize=(12, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('相关系数热力图')
plt.show()

回归分析

from sklearn.linear_model import LinearRegression

# 准备数据
X = df[['feature_column']]
y = df['target_column']

# 创建模型
model = LinearRegression()
model.fit(X, y)

# 预测
predictions = model.predict(X)

结果导出

保存处理后的数据

# 保存为CSV文件
df.to_csv('cleaned_data.csv', index=False)

# 保存为Excel文件
df.to_excel('cleaned_data.xlsx', index=False)

总结

通过以上步骤,你可以完成基本的数据分析流程。记住,数据分析是一个迭代的过程,可能需要多次调整和优化。

在HarmonyOS中,删除媒体文件并使其进入系统相册回收站,可使用MediaLibrarydeleteAsset接口。该接口会将文件移至回收站,而非永久删除。调用时需申请ohos.permission.WRITE_IMAGEVIDEO权限。Flutter项目可通过ffichannel调用HarmonyOS原生接口。

在HarmonyOS Next中,处理媒体文件并使其进入系统相册的回收站,需要使用HarmonyOS的媒体库管理接口,而不是Android的API。createTrashRequest是Android的MediaStore API,在HarmonyOS Next上无法使用。

HarmonyOS Next提供了@ohos.file.photoAccessHelper(媒体库管理)模块来管理系统相册中的媒体文件。核心思路是:通过媒体库获取到文件对应的PhotoAsset对象,然后调用其trash()方法。该方法会将文件移至系统相册的回收站,而不是永久删除。

以下是关键步骤和代码示例:

  1. 获取媒体库管理模块:首先需要导入模块并获取photoAccessHelper实例。
  2. 申请权限:在应用的module.json5文件中声明必要的权限,例如ohos.permission.READ_IMAGEVIDEOohos.permission.WRITE_IMAGEVIDEO,并在运行时动态申请。
  3. 获取文件对应的PhotoAsset:这是最关键的一步。你不能直接通过一个本地文件路径(file://)来将其移入回收站。必须使用媒体库的查询接口(如getAssets),根据文件的URI、ID或通过条件匹配(如文件名、日期)来获取到系统媒体库中对应的PhotoAsset对象。
  4. 调用trash方法:对获取到的PhotoAsset对象调用trash()方法。该方法返回一个Promise,操作成功后会将被删除文件的URI放入回收站。

示例代码片段(ArkTS)

import photoAccessHelper from '@ohos.file.photoAccessHelper';
import common from '@ohos.app.ability.common';

// 1. 获取photoAccessHelper实例,需要上下文context
let context: common.Context = ...; // 获取Ability上下文
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);

// 2. 假设你已知要删除的媒体文件在媒体库中的URI (例如从MediaScanner扫描后获得)
let targetFileUri: string = 'file://media/Photo/1/IMG_20250101.jpg';

// 3. 通过条件查询获取对应的PhotoAsset对象
let fetchOptions: photoAccessHelper.FetchOptions = {
  fetchColumns: [],
  predicates: {
    uri: targetFileUri // 根据URI进行匹配。也可以使用id或其他属性。
  }
};
try {
  let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> = await phAccessHelper.getAssets(fetchOptions);
  let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
  if (photoAsset != undefined) {
    // 4. 调用trash方法移至回收站
    await photoAsset.trash(true); // 参数为true表示放入回收站
    console.info('File moved to trash successfully.');
  } else {
    console.error('Failed to find the corresponding PhotoAsset in the gallery.');
  }
} catch (err) {
  console.error(`Failed to trash the file. Code: ${err.code}, message: ${err.message}`);
}

重要说明

  • 文件必须存在于系统媒体库中:此方法仅适用于已被系统媒体库(相册)索引的文件。如果你的文件仅保存在应用私有目录(data/storage/el...)或未通过媒体扫描器(MediaScanner)添加到公共媒体库,则无法通过此方式操作。你需要先确保文件已保存到公共媒体目录(如Photos/)并被扫描。
  • Flutter项目中的调用:你需要在Flutter侧通过平台通道(Platform Channel)调用上述HarmonyOS Native(ArkTS)的代码。
  • 永久删除:如果需要永久删除,可以使用PhotoAssetdelete()方法,或者调用trash()后再从回收站清理。

总结:解决方案是使用HarmonyOS Next自身的photoAccessHelper模块,通过查询获取PhotoAsset并调用其trash()方法。

回到顶部