Не удаётся найти файл, пользуясь системной программой

Я хотел сделать возможность выбора любого файла, который можно открыть как текст, пользователем. Для этого я не стал делать своё подобие проводника и использовал готовые функции андроида. Но, все пошло ни так хорошо, как я хотел.

Поля, к которым я обращаюсь в методах, упомянутых ниже:

    private var currentFileName: String? = null
    private var currentFilePath: String? = null
    
    private val REQUEST_ACTION_GET_CONTENT_CODE = 11
    private val REQUEST_PERMISSIONS_CODE = 426
    
    private val WRITE_PERMISSION = Manifest.permission.WRITE_EXTERNAL_STORAGE
    private val READ_PERMISSION = Manifest.permission.READ_EXTERNAL_STORAGE
    private val PERMISSION_GRANTED = PackageManager.PERMISSION_GRANTED

Метод, в котором я подготавливаю активность для выбора файла пользователем:

    open fun openFileChooser() {
        if(hasPermissions()) {
            val intent = Intent(Intent.ACTION_GET_CONTENT)
            intent.type = "*/*"
            startActivityForResult(Intent.createChooser(intent, ""), REQUEST_ACTION_GET_CONTENT_CODE)
        } else {
            ActivityCompat.requestPermissions(this, arrayOf(WRITE_PERMISSION, READ_PERMISSION), REQUEST_PERMISSIONS_CODE)
        }
    }

Метод, обрабатывающий выбор пользователя:

    override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
        if(resultCode == RESULT_OK) {
            val data = intent?.data
            currentFileName = data?.lastPathSegment
            currentFilePath = data?.path
            val file = File(currentFilePath!!)
            println("Выбран файл \"$currentFileName\" в директории \"$currentFilePath\"")
            println("Его содержимое: ${file.readText()}")
        }
        super.onActivityResult(requestCode, resultCode, intent)
    }

Запустив код на эмуляторе, в лог вышло следующее сообщение (одно, во втором как раз ошибка, в методе readText)

I/System.out: Выбран файл "file.txt" в директории "/storage_root/file.txt"

Первый раз я запускал на настоящем устройстве с операционной системой MIUI, там путь к файлу был, конечно, совсем другим, как и само имя файла.

Вся проблема в том, что я не могу найти файл по получаемому пути, ошибка:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: kotoffeyapp.example.simpletexteditor, PID: 3631
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=11, result=-1, data=Intent { act=android.intent.action.SEND dat=content://com.amaze.filemanager.FILE_PROVIDER/storage_root/file.txt typ=txt flg=0x1 }} to activity {kotoffeyapp.example.simpletexteditor/kotoffeyapp.example.simpletexteditor.MainActivity}: java.io.FileNotFoundException: /storage_root/file.txt (No such file or directory)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4092)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4135)
        at android.app.ActivityThread.-wrap20(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1536)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6198)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
     Caused by: java.io.FileNotFoundException: /storage_root/file.txt (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:146)
        at kotlin.io.FilesKt__FileReadWriteKt.readText(FileReadWrite.kt:125)
        at kotlin.io.FilesKt__FileReadWriteKt.readText$default(FileReadWrite.kt:125)
        at kotoffeyapp.example.simpletexteditor.utilities.FileHelper.onActivityResult(FileHelper.kt:39)
        at android.app.Activity.dispatchActivityResult(Activity.java:6945)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4088)

У приложения есть разрешения на чтение и запись внешнего хранилища, проверял в настройках. Как мне по этому пути находить файл, что я делаю ни так?


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