안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요. DB에 파일 이름을 저장해둔 후 res/raw 에 mp3 파일을 넣고
db쿼리를 던져서 mp3 파일이름과 일치하는 mp3를 재생시키고싶은데요
MediaPlayer.create(getBaseContext(), R.raw.todoc3_2);
미디어플레이어에서 뒤에 R.raw.todoc3_2 이부분은 변수로 지정할 수가
없더라고요.. 무조건 R.raw.todoc3_2 이렇게 해야되더라고요 ㅠㅠ
String todoc = db쿼리 던지는 쿼리;
MediaPlayer.create(getBaseContext(), R.raw."+todoc");
이렇게 하려는게 제 의도인데..
ㅠㅠ 이렇게 안되더라고 방법 아시는분.. 좀 알려주세요 ㅠㅠ




적어주신 코드처럼은 처리가 불가능합니다. R.raw.todoc3_2라는 것은
풀어서 보면 R클래스내에 raw라는 innerClass 내의 todoc3_2라는 변수입니다.
이것을 명시적으로 접근하는 것입니다.
또한 이 때 todoc3_2는 int형 변수이구요.
클래스 내의 명시적 접근이기 때문에 위처럼 string조합을 시켜서 클래스내의 변수등을 호출할 수가 없습니다.
(쉽게 말씀드려 문법자체가 맞지 않습니다.)
말씀하신 것처럼, db에 정보를 가져와 해당 mp3를 재생하려면 여러가지 방법이 있는데요...
가장 쉬운 방법으로는, array에 resId 정보를 저장하시고, DB에 해당 position을 기억하게 한다음 각 position에 해당하는 resId를 돌려주시면 됩니다.
ex)
int resIds[3] = {R.raw.todoc3_1, R.raw.todoc3_2, R.raw.todoc3_3}
db저장시에는
---------------------------
name position
노래1 0
노래2 1
노래3 2
-------------------------
이렇게 정의가 되면,
이후 불러올 때 노래1, 2, 3 을 DB에서 가져오고, 이에 따른 position에 따라
inte position = db에서 얻어온 position
MedaPlayer.create(getBasedContext(), resIds[position]);
이런식으로 처리하면 됩니다.