Короткий ответ - нет, вы не можете использовать content://
в качестве источника для аудиоэлемента.
Ошибка, которую вы получаете, связана с методом HTML5Audio setDataSource
, который, если вы посмотрите на исходный код , вызывает MediaPlayer setDataSource
с аудио-ссылкой. И если вы посмотрите на документацию для класса MediaPlayer
, он поддерживает только пути к файлам и URL-адреса http / rtsp.
Я думаю, что вам лучше всего сохранить аудиоконтент в путь к файлу и использовать URL-адрес file:
для доступа к нему.
Однако, если я правильно помню, вам также нужно сделать мир файлов читаемым, чтобы код MediaPlayer
мог получить к нему доступ. Это требует использования частного android.os.FileUtils
класса с кодом, подобным следующему:
void makeFileReadable(String filename) {
try {
Class fileUtils = Class.forName("android.os.FileUtils");
Method setPermissions = fileUtils.getMethod("setPermissions", String.class,
int.class, int.class, int.class);
setPermissions.invoke(fileUtils, filename, 0775, -1, -1);
}
catch (Exception ex) {
}
}
775
является эквивалентом rwxrwxr-x
, который может быть более допустимым, чем необходимо, поэтому вы можете попробовать поэкспериментировать с менее допустимыми значениями. Также обратите внимание, что вам, вероятно, потребуется установить разрешения для каталога, содержащего файл, а также для его родителя и т. Д., А не только для самого файла.