Установка источника данных для необработанного идентификатора в MediaPlayer
-
16-09-2019 - |
Вопрос
В методе MediaPlayer.create можно использовать идентификатор файла Raw, но как его использовать в методе setDataSource?
Решение
Вы можете загрузить необработанный звук во входной поток и загрузить его в MediaPlayer, как обычный поток:
InputStream ins = getResources().openRawResource(R.raw.example);
а затем следуйте инструкциям по потоковой передаче, например карманное путешествие
Но это слишком сложно, так как вы можете просто позвонить
mp = MediaPlayer.create(counterstrikesb.this, R.raw.example);
Другие советы
Обратитесь к источнику android.media.MediaPlayer
AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
if (afd == null) return;
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
Возможно, вы захотите добавить в блок try-catch.
перефразируя ответ @Kartik здесь Получить URI файла .mp3, хранящегося в папке res/raw в Android
Если вы хотите получить URI какого-либо ресурса, есть два способа:
- Использование имени ресурса
Синтаксис:android.resource://[пакет]/[тип разрешения]/[имя разрешения]
Пример :Uri.parse("android.resource://com.my.package/drawable/icon");
- Использование идентификатора ресурса
Синтаксис:android.resource://[пакет]/[resource_id]
Пример :Uri.parse ("android.resource: //com.my.package/" + r.drawable.icon);
Это были примеры получения URI любого файла изображения, хранящегося в папке с возможностью рисования.Аналогичным образом вы можете получить URI папки res/raw.
ИМО Второй путь будет предпочтительным, поскольку переименование ресурса и т. Д. Может быть легко рефактор.
Установите источник данных следующим образом:
CONSTANTS.RES_PREFIX = "android.resource://com.my.package/"
mp.setDataSource(getApplicationContext(), Uri.parse(CONSTANTS.RES_PREFIX + R.raw.id));