我在 Android 11 中重命名专辑时遇到了问题。我已经尝试过使用 createWriteRequest
,但是无法重命名“Albums”文件夹。请帮助我解决这个问题。
首先,我选择了文件夹“ABC”并想将其重命名为“XYZ”。因此,通常情况下我会这样做:
File mainFile = new File("parentPath"+"/"+"ABC");
File newRenameFile = new File("parentPath"+"/"+"XYZ");
if (mainFile.renameTo(newRenameFile)) {
// Success
}
但在 Android 11 中:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
List<Uri> uris = new ArrayList<>();
long mediaID = getFilePathToMediaID(mainFile.getAbsolutePath(), MainActivity.this);
Uri Uri_one = ContentUris.withAppendedId(MediaStore.Images.Media.getContentUri("external"), mediaID);
// i am getting this value in `uri_one = "content://media/external/images/media/22686";`
uris.add(Uri_one);
requestRenamePermission(MainActivity.this, uris);
}
请求写入权限。
private static final int EDIT_REQUEST_CODE = 222;
@RequiresApi(api = Build.VERSION_CODES.R)
private void requestRenamePermission(Context context, List<Uri> uri_one) {
PendingIntent pi = MediaStore.createWriteRequest(context.getContentResolver(), uri_one);
try {
startIntentSenderForResult(pi.getIntentSender(), EDIT_REQUEST_CODE, null, 0, 0, 0);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case EDIT_REQUEST_CODE:
if (resultCode == Activity.RESULT_OK) {
// 在此 mainFile 上获得写入权限后,我再次调用 rename 函数。
if (mainFile.renameTo(newRenameFile)) {
// Success
}else{
// 在 Android 11 中重命名失败
}
} else {
Toast.makeText(MainActivity.this, "无法对此...!", Toast.LENGTH_SHORT).show();
}
break;
}
}
其中“22686”是我从以下函数获得的媒体 ID。
public static long getFilePathToMediaID(String songPath, Context context) {
long id = 0;
ContentResolver cr = context.getContentResolver();
Uri uri = MediaStore.Files.getContentUri("external");
String selection = MediaStore.Audio.Media.DATA;
String[] selectionArgs = {songPath};
String[] projection = {MediaStore.Audio.Media._ID};
String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
Cursor cursor = cr.query(uri, projection, selection + "=?", selectionArgs, null);
if (cursor != null) {
while (cursor.moveToNext()) {
int idIndex = cursor.getColumnIndex(MediaStore.Audio.Media._ID);
id = Long.parseLong(cursor.getString(idIndex));
}
}
return id;
}
对于重命名,我使用了“oldFile.renameTo(newFile)”函数,正如在 Android 10 中一样。但这不能帮助我重命名文件夹。你的小指南可以帮助我很多!