Impostazione fonte di dati a un ID prima in MediaPlayer
-
16-09-2019 - |
Domanda
Nel metodo MediaPlayer.create un id in un file Raw può essere utilizzato, ma come utilizzare questo metodo in setDataSource?
Soluzione
È possibile caricare l'audio raw in un flusso di input e caricarla in un MediaPlayer come si farebbe con un flusso normale:
InputStream ins = getResources().openRawResource(R.raw.example);
e poi seguire un tutorial di streaming come pocketjourney
Ma questo è troppo complicato, come si può chiamare
mp = MediaPlayer.create(counterstrikesb.this, R.raw.example);
Altri suggerimenti
Fare riferimento alla fonte android.media.MediaPlayer
AssetFileDescriptor afd = context.getResources().openRawResourceFd(resid);
if (afd == null) return;
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
È possibile aggiungere try-catch al blocco.
parafrasando @ risposta di Kartik qui ottenere URI di .mp3 memorizzato nella res / cartella prima in Android
Se si desidera ottenere qualsiasi risorsa URI poi ci sono due modi:
- Utilizzo di risorse del nome
Sintassi: android.resource: // [pacchetto] / [res digitare] / [res nome]
Esempio: Uri.parse ( "android.resource: //com.my.package/drawable/icon");
- Utilizzo delle Risorse Id
Sintassi: android.resource: // [pacchetto] / [RESOURCE_ID]
Esempio: Uri.parse ( "android.resource: //com.my.package/" + R.drawable.icon);
Questi sono stati gli esempi per ottenere l'URI di un file immagine memorizzato nella cartella drawable. Allo stesso modo è possibile ottenere URI di res cartella / crudo.
IMO il secondo modo sarebbe preferito come rinominare l'etc risorsa può essere facilmente riscritta.
Imposta la sorgente di dati in questo modo:
CONSTANTS.RES_PREFIX = "android.resource://com.my.package/"
mp.setDataSource(getApplicationContext(), Uri.parse(CONSTANTS.RES_PREFIX + R.raw.id));