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);
}