Definir fonte de dados para um ID cru em MediaPlayer
-
16-09-2019 - |
Pergunta
método Em MediaPlayer.create um id para um arquivo Raw pode ser usado, mas como usar esse método em setDataSource?
Solução
Você pode carregar o áudio cru em um fluxo de entrada e carregá-lo em um MediaPlayer como se fosse um fluxo normal:
InputStream ins = getResources().openRawResource(R.raw.example);
e siga um tutorial de streaming como pocketjourney
Mas isso é excessivamente complicado, como você pode apenas chamar
mp = MediaPlayer.create(counterstrikesb.this, R.raw.example);
Outras dicas
Consulte a fonte android.media.MediaPlayer
AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
if (afd == null) return;
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
Você pode querer adicionar try-catch para o bloco.
parafraseando @ resposta de Kartik aqui obter URI de arquivo .mp3 armazenado em res pasta / raw no android
Se você deseja obter qualquer recurso URI então existem duas maneiras:
- Usar Nome do recurso
Sintaxe: android.resource: // [pacote] / [tipo de res] / [nome res]
Exemplo: URI.parse ( "android.resource: //com.my.package/drawable/icon");
- Usando Resource Id
Sintaxe: android.resource: // [pacote] / [RESOURCE_ID]
Exemplo: URI.parse ( "android.resource: //com.my.package/" + R.drawable.icon);
Estes foram os exemplos para obter o URI de qualquer arquivo de imagem armazenados na pasta drawable. Da mesma forma você pode obter URIs de res pasta / raw.
IMO a segunda maneira seria preferível como renomear o recurso etc pode ser facilmente reformulado.
Definir a fonte de dados da seguinte forma:
CONSTANTS.RES_PREFIX = "android.resource://com.my.package/"
mp.setDataSource(getApplicationContext(), Uri.parse(CONSTANTS.RES_PREFIX + R.raw.id));