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:// .... 로 직접 접근해서 플레이하는건 잘됩니다.
아래는 위의 충고를 바탕으로 작성되어 문제가 해결된 코드입니다.
에러 메시지는 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());
'Android > Tip&Tech' 카테고리의 다른 글
[안드로이드]롤오버 이미지 만들기 (0) | 2010.12.03 |
---|---|
[펌]Mediaplayer Service - 백그라운드 음악 실행 (0) | 2010.12.03 |
[펌]안드로이드 개발 팁 및 소스 링크 (0) | 2010.12.02 |
Handling Screen On or Off intent (0) | 2010.12.02 |
[퍼옴]기본 리니어 레이아웃 정렬 방식 (0) | 2010.12.02 |