미디어 플레이어에서 데이터 소스를 원시 ID로 설정합니다
-
16-09-2019 - |
문제
MediaPlayer.create 메소드에서 원시 파일의 ID를 사용할 수 있지만 SetDatasource 메소드에서이를 사용하는 방법은 무엇입니까?
해결책
원시 오디오를 입력 스트림에로드하여 일반 스트림과 같이 미디어 플레이어에로드 할 수 있습니다.
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의 답변을 여기에서 paraphrasing Android의 RES/RAW 폴더에 저장된 .mp3 파일의 URI 받기
Resource URI를 받으려면 두 가지 방법이 있습니다.
- 리소스 이름 사용
구문 : android.resource : // [package]/[res type]/[res name
예 : uri.parse ( "Android.resource : //com.my.package/drawable/icon");
- 리소스 ID 사용
구문 : android.resource : // [package]/[resource_id
예 : uri.parse ( "android.resource : //com.my.package/" + r.drawable.icon);
이들은 Drawable 폴더에 저장된 이미지 파일의 URI를 가져 오는 예입니다. 마찬가지로 RES/RAW 폴더의 URI를 얻을 수 있습니다.
IMO는 자원 등을 쉽게 리팩토링 할 수 있으므로 두 번째 방법은 선호됩니다.
SO처럼 데이터 소스를 설정하십시오.
CONSTANTS.RES_PREFIX = "android.resource://com.my.package/"
mp.setDataSource(getApplicationContext(), Uri.parse(CONSTANTS.RES_PREFIX + R.raw.id));