You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 10下能否通过MediaStore重命名已保存的文件?

Android 10+ 重命名MediaStore中创建的音频文件

针对你通过MediaStore插入的音频文件,正确的重命名方式是利用ContentResolver更新MediaStore的记录,以下是可行方案:

步骤1:获取目标文件的Uri

你有两种方式获取要修改的文件Uri:

  • 直接复用插入时得到的uri(推荐,避免查询出错,可将Uri保存到SharedPreferences或本地数据库)
  • 通过查询MediaStore定位文件(如果没保存Uri):
String oldFilename = "原文件名"; // 替换成你的原文件名(不带后缀)
String targetPath = Environment.DIRECTORY_MUSIC + "/dir/";

String selection = MediaStore.MediaColumns.DISPLAY_NAME + "=? AND " + MediaStore.MediaColumns.RELATIVE_PATH + "=?";
String[] selectionArgs = new String[]{oldFilename + ".wav", targetPath};

Cursor cursor = getContentResolver().query(
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
        new String[]{MediaStore.MediaColumns._ID},
        selection,
        selectionArgs,
        null
);

Uri targetUri = null;
if (cursor != null && cursor.moveToFirst()) {
    long fileId = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID));
    targetUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, fileId);
    cursor.close();
}

步骤2:执行重命名操作

构建更新的ContentValues,调用ContentResolver.update()修改文件名:

if (targetUri != null) {
    String newFilename = "新文件名"; // 替换成你的新文件名(不带后缀)
    ContentValues updateValues = new ContentValues();
    updateValues.put(MediaStore.MediaColumns.DISPLAY_NAME, newFilename + ".wav");

    try {
        int rowsUpdated = getContentResolver().update(
                targetUri,
                updateValues,
                null,
                null
        );

        if (rowsUpdated > 0) {
            // 重命名成功,通知媒体库扫描更新
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, targetUri));
        } else {
            // 重命名失败:文件不存在或无权限
        }
    } catch (SecurityException e) {
        e.printStackTrace();
        // 权限异常处理:确保是自己应用创建的文件,无需额外权限(Android 10+)
    }
}

关键注意事项

  • 不要直接操作File对象重命名:Android 10+启用Scoped Storage后,直接修改File会导致异常或不生效,必须通过MediaStore操作
  • 仅能修改自己应用创建的文件:如果修改其他应用的文件,需要申请MANAGE_EXTERNAL_STORAGE权限(不推荐)
  • 媒体库更新延迟:修改后发送广播触发媒体扫描,确保文件管理器能及时看到新文件名

内容的提问来源于stack exchange,提问作者androidisgood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 11:15:44