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
相关产品推荐
相关产品推荐

