2017-12-06 26 views
0

나는 최근에 내가 개발 한 오디오 플레이어가 연주를 중단했다는 것을 알았다.MediaPlayer는 경로가 # 인 파일을 재생하는 데 문제가 있습니까?

"Prepare failed.: status=0x1" 

파일 이름에 포함 # 기호 :

그것은 MediaPlayer.prepare()가 예외를 던진 것으로 밝혀졌다. #을 제거한 후 재생할 수 있습니다. 방금 # 기호를 제거했습니다. 파일 경로 자체가 길다과 공간을 포함, [등

final Uri uri = Uri.parse("/storage/sdcard1/audio/Die Toten Hosen/03 - Boxed Set/2007 - Die DTH Jubiläumsedition [17 CD Boxed Set Remasted]/CD 1 - Opel-Gang/18. Radio Argentina #1.mp3"); 
mediaPlayer.reset(); 
mediaPlayer.setDataSource(context, uri); 

내가

adb push /tmp/ /storage/sdcard1/audio/ 

내 전화로 파일을 전송하고, 그들 중 일부가 포함되어있는 경우 왜 문제인가? 기호를 사용하면 건너 뜁니다 (또는 오류/경고가 발생합니다. 정확히 기억하지 못합니다). 그러나 이름에 #이있는 파일은 성공적으로 복사되었습니다. 몇 가지 탈출 규칙이있는 경우 문제는 파일을 포함하는 파일과 동일해야합니까? #이 들어있는 파일.

나는 어떤 일이 일어 났는지에 대한 논리가 없기 때문에. 무엇이 도주되어야하고 어떻게해야 하는지를 정의하는 중앙 장소가없는 것 같습니다.

답변

0

이 솔루션은 사용하는 것이 었습니다.

mediaPlayer.setDataSource("/storage/sdcard1/audio/Die Toten Hosen/03 - Boxed Set/2007 - Die DTH Jubiläumsedition [17 CD Boxed Set Remasted]/CD 1 - Opel-Gang/18. Radio Argentina #1.mp3"); 
0

Uriaudioplayer에 전달 했으므로 #?은 특수 문자입니다. Uri 내에서 해시 #Fragment Identifier으로 알려져 있습니다. 예를 들어 웹 페이지를 특정 앵커 태그로 자동 건너 뛰거나 지정된 시작 시간으로 건너 뜁니다. Uri의 물음표 ?은 Uri를 소비하는 모든 항목에서 사용할 수있는 추가 인수 인 쿼리 매개 변수를 허용합니다.

이들은 Uri의 컨텍스트에서 특수 문자이므로 재생이 처음에는 실패하고 파일 이름이 바뀌면 작동합니다. 당신은 URLEncoder.encode()

공공 정적 문자열 인코딩 (String를, 문자열 ENC) 이 예외 : UnsupportedEncodingException

를 throw를 사용하여 이러한 특수 문자를 탈출 할 것은 응용 프로그램에 문자열을 변환/X-WWW-형상 - 특정 인코딩 체계를 사용하는 urlencoded 형식. 이 메소드는 제공된 인코딩 체계를 사용하여 안전하지 않은 문자의 바이트를 가져옵니다. 참고 : World Wide Web Consortium Recommendation에는 UTF-8을 사용해야한다고 나와 있습니다. 그렇게하지 않으면 불일치가 생길 수 있습니다.

매개 변수 :

  • - 문자열은 번역합니다.

  • enc - 지원되는 문자 인코딩의 이름입니다.

결과 : 번역 된 문자열입니다.따라서 귀하의 경우

:

MediaPlayer.setDataSource(String); 

은 분명히 경로 이름에 # 기호를 처리 할 수 ​​

final String encoded = URLEncoder.encode("/storage/sdcard1/audio/Die Toten Hosen/03 - Boxed Set/2007 - Die DTH Jubiläumsedition [17 CD Boxed Set Remasted]/CD 1 Opel-Gang/18. Radio Argentina #1.mp3", "UTF-8"); 
final Uri uri = Uri.parse(encoded); 
mediaPlayer.reset(); 
mediaPlayer.setDataSource(context, uri); 
+0

아니요. 도움이되지 않습니다. 같은 오류. – ka3ak