Android - как получить путь к выбранному файлу

Задача - импортировать настройки в приложение на Android из json файла.

В обработчике события нажатия кнопки импорта настроек я открываю файловый менеджер (работаю с эмулятором), выбираю в папке Downloads нужный мне файл stngs.json, и попадаю в обработчик события выбора файла. В этом обработчике пытаюсь получить путь к файлу, но путь получается какой-то странный - "/document/29". Затем при попытке открыть файл по заданному пути возникает исключение.

Что я делаю не так, и как мне открыть выбранный файл?

ActivityResultLauncher<Intent> mImportSettingsResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if (result.getResultCode() == RESULT_OK) {
                    Intent intent = result.getData();

                    Uri uri = intent.getData(); // "content://com.android.providers.downloads.documents/document/29"
                    String path = uri.getPath(); // "/document/29"
                    try(FileInputStream fileInputStream = openFileInput(path);
                        InputStreamReader streamReader = new InputStreamReader(fileInputStream)){

                        Gson gson = new Gson();
                        Settings stngs = gson.fromJson(streamReader, Settings.class);
                        // ... Работа с json

                    }
                    catch (IOException ex){
                        ex.printStackTrace();
                    }
                }
            }
        });

public void onImportSettings_Click(View view) {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("*/*");
    mImportSettingsResult.launch(intent);
}

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