В методе MediaPlayer.create можно использовать идентификатор для Raw файла, но как использовать его в методе setDataSource?
Настройка источника данных на исходный идентификатор в MediaPlayer
Ответ 1
Вы можете загрузить исходный звук во входной поток и загрузить его в MediaPlayer, как и обычный поток:
InputStream ins = getResources().openRawResource(R.raw.example);
а затем следуйте руководству по потоковой передаче, например pocketjourney
Но это слишком сложно, так как вы можете просто позвонить
mp = MediaPlayer.create(counterstrikesb.this, R.raw.example);
Ответ 2
Обратитесь к источнику 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 в блок.
Ответ 3
перефразирование @Kartik ответ здесь Получить URI файла .mp3, хранящегося в папке res/raw в android
Если вы хотите получить любой URI ресурса, есть два способа:
- Использование имени ресурса
Синтаксис: android.resource://[package]/[res type]/[res name]
Пример: Uri.parse( "android.resource://com.my.package/drawable/icon" );
- Использование идентификатора ресурса
Синтаксис: android.resource://[package]/[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));