Не переименовывается файл в Android 10

Написал решение для переименования файлов, но в Android 10 ничего не происходит, хотя в 11 и выше переименовывается нормально.

public class PathDiv {
public static String dev(String path){
    return path.replaceAll("^(.*)/.*?$","$1");
}

public static void renameFilesInDir(String path, String dirIn, String ext) {

    File checkFile = new File(path);
        if (checkFile.isFile()) {
            try {
                checkFile.renameTo(new File(dirIn, ext));

            } catch (Exception e) {
                e.printStackTrace();
            }
    }
}

Метод renameTo возвращает значение false

path: /storage/emulated/0/Music/04. Kasger - Highland.mp3 dirIn: /storage/emulated/0/Music ext: Highland.mp3

PathDiv.renameFilesInDir(songItem.realUri,PathDiv.dev(songItem.realUri),newName.toString())

Помогите пожалуйста, в чем проблема?

стектрейс: введите сюда описание изображения

private fun updateOrRequestPermissions() {
    val hasReadPermission = ContextCompat.checkSelfPermission(
        this,
        Manifest.permission.READ_EXTERNAL_STORAGE
    ) == PackageManager.PERMISSION_GRANTED
    val hasWritePermission = ContextCompat.checkSelfPermission(
        this,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
    ) == PackageManager.PERMISSION_GRANTED
    val minSdk29 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q

    readPermissionGranted = hasReadPermission
    writePermissionGranted = hasWritePermission || minSdk29

    val permissionsToRequest = mutableListOf<String>()
    if (!writePermissionGranted) {
        permissionsToRequest.add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
    }
    if (!readPermissionGranted) {
        permissionsToRequest.add(Manifest.permission.READ_EXTERNAL_STORAGE)
    }
    if (permissionsToRequest.isNotEmpty()) {
        permissionsLauncher.launch(permissionsToRequest.toTypedArray())
    }
}

Ответы (1 шт):

Автор решения: woesss

Проблема в том, что у вашего приложения нет доступа к файлу.
На А11+ вы можете создавать файлы в стандартных директориях без каких либо привелегий, но чужие файлы удалять/изменять таким способом нельзя, кроме того если приложение удалить а потом установить снова, доступа к этим файлам уже не будет.
На А10 доступ к файлам вне собственных папок приложения возможен только с флагом в манифесте:

<manifest ... >
  <!-- This attribute is "false" by default on apps targeting
       Android 10. -->
  <application android:requestLegacyExternalStorage="true" ... >
    ...
  </application>
</manifest>

Кроме того на Андроид 10 и ниже для записи файлов требуется привилегия android.permission.WRITE_EXTERNAL_STORAGE - нужно не только объявить в манифесте, но и запросить в коде перед попыткой работы с файлом.

UPD: у вас не запрашивается привилегия записи на А10 и выше включительно, исправьте на А11:

    val minSdk30 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
    ...
    writePermissionGranted = hasWritePermission || minSdk30
→ Ссылка