在 Android 11 中,更改专辑文件夹名称不起作用。

时间:2021-08-12 04:11:49

标签: android file rename mediastore

我在 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 中一样。但这不能帮助我重命名文件夹。你的小指南可以帮助我很多!

0 个答案:

没有答案