Android: Получение URI файла из URI контента?

В моем приложении пользователь должен выбрать аудиофайл, который затем обрабатывает приложение. Проблема в том, что для того, чтобы приложение выполняло то, что я хочу делать с аудиофайлами, мне нужно, чтобы URI был в формате файла. Когда я использую собственный музыкальный плеер Android для просмотра аудиофайла в приложении, URI является URI контента, который выглядит следующим образом:

content://media/external/audio/media/710 

Однако, используя приложение популярного файлового менеджера Astro, я получаю следующее:

 file:///sdcard/media/audio/ringtones/GetupGetOut.mp3 

Последнее гораздо более доступно для меня, чтобы работать, но, конечно, я хочу, чтобы приложение имело функциональность с аудио-файлом, который пользователь выбирает независимо от программы, которую они используют для просмотра своей коллекции. Итак, мой вопрос в том, есть ли способ конвертировать содержимое: // style URI в файл: // URI? В противном случае, что бы вы порекомендовали мне решить эту проблему? Вот код, который вызывает выборщик, для справки:

 Intent ringIntent = new Intent(); ringIntent.setType("audio/mp3"); ringIntent.setAction(Intent.ACTION_GET_CONTENT); ringIntent.addCategory(Intent.CATEGORY_OPENABLE); startActivityForResult(Intent.createChooser(ringIntent, "Select Ringtone"), SELECT_RINGTONE); 

Большое спасибо! Пожалуйста, дайте мне знать, если я могу предоставить больше кода, чтобы помочь с ответом.

Я делаю следующее с URI содержимого:

 m_ringerPath = m_ringtoneUri.getPath(); File file = new File(m_ringerPath); 

Затем выполните некоторые действия FileInputStream с указанным файлом.

Solutions Collecting From Web of "Android: Получение URI файла из URI контента?"

Просто используйте getContentResolver().openInputStream(uri) чтобы получить InputStream из URI.

http://developer.android.com/reference/android/content/ContentResolver.html#openInputStream(android.net.Uri)

Вы можете использовать Content Resolver для получения file:// путь из content:// URI:

 String filePath = null; Uri _uri = data.getData(); Log.d("","URI = "+ _uri); if (_uri != null && "content".equals(_uri.getScheme())) { Cursor cursor = this.getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null); cursor.moveToFirst(); filePath = cursor.getString(0); cursor.close(); } else { filePath = _uri.getPath(); } Log.d("","Chosen path = "+ filePath); 

Попытка обработать URI с контентом: // по вызову ContentResolver.query() не является хорошим решением. В HTC Desire под управлением 4.2.2 вы можете получить NULL в качестве результата запроса.

Почему бы не использовать ContentResolver вместо этого? https://stackoverflow.com/a/29141800/3205334