Подтвердить что ты не робот

Настройка источника данных на исходный идентификатор в MediaPlayer

В методе MediaPlayer.create можно использовать идентификатор для Raw файла, но как использовать его в методе setDataSource?

4b9b3361

Ответ 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" );

  1. Использование идентификатора ресурса

Синтаксис: 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));