«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

올해는 머신러닝이다.

[펌]mediaplayer로 mp3돌리는 팁 본문

Android/Tip&Tech

[펌]mediaplayer로 mp3돌리는 팁

행복한 수지아빠 2010. 12. 3. 16:27

2010/08/04 16:11

출처 :  http://blog.naver.com/romistudio/50093624442

 http://blog.naver.com/romistudio/50093624442

질답 게시판에도 올려봤지만... 저만 이런 경우를 만난 것인지..아직도 알 수가 없네요.
에러 메시지는 Prepare failed status = 0x1 입니다.

인터넷을 검색해 봐도...뾰족한 답변이 없었습니다.
그러다...갑자기 하나 보인... 검색 결과물이 있었는데요..

http://www.anddev.org/viewtopic.php?p=16478

에서 ... 이런 글을 보게 되었습니다.

you store your tempfile in the application cache directory and the problem is that the MediaPlayer doesn't have access rights to application directories.

Instead you should passing a FileDescriptor to your MediaPlayer with setDataSource(FileDescriptor fd).

Something like this:
...
FileInputStream fis = new FileInputStream(bufferedFile);
FileDescriptor fd = fis.getFD();
mediaPlayer.setDataSource(fd);


결국... 저의 경우가 tempfile 이고. 어플의 캐쉬 폴더라는 것인지... 확신은 안가지만.. 위의 코드로 문제는 해결되었습니다.
http url 로 다운 받아.. /data/data/.../files 가 어플의 캐쉬 폴더?? 그리고. 내가 받은 파일이 임시 파일이라고?
논리는 안맞지만..여튼 위의 코드로 작동이 되었습니다.

먼저 게시판에 흔하게 보이는 코드이며..저 역시 사용한 코드는 다음과 같으며.. 그뒤 두번째가...위의 충고(?)를 바탕으로
작성된 코드입니다. 참고로... 흔히 보이는 코드 (아래 첫번째꺼) 로는 http:// .... 로 직접 접근해서 플레이하는건 잘됩니다.


01.try {
02. MediaPlayer mediaPlayer = new MediaPlayer();
03. mediaPlayer.setDataSource(pathinlocal+FileName);
04. mediaPlayer.prepare();   ---- 여기에서 런타임 에러 발생 Prepare failed : status = 0x1
05. mediaPlayer.start();
06.} catch (IOException e) {
07. // handle exception
08. //((EditText) ((Activity) mMain).findViewById(R.id.txtStatus)).setText(e.getMessage());
09.}



아래는 위의 충고를 바탕으로 작성되어 문제가 해결된 코드입니다.
01.try {
02. MediaPlayer mediaPlayer = new MediaPlayer();
03. FileInputStream fis = new FileInputStream(pathinlocal+FileName);
04. FileDescriptor fd = fis.getFD();
05. mediaPlayer.setDataSource(fd);
06. mediaPlayer.prepare();
07. mediaPlayer.start();
08.} catch (IOException e) {
09. // handle exception
10. //((EditText) ((Activity) mMain).findViewById(R.id.txtStatus)).setText(e.getMessage());