2017-12-06 11 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

audioplayerUriを渡すので、#?は特殊文字です。 Uri内のハッシュ#は、Fragment Identifierとして知られています。たとえば、Webページを特定のアンカータグに自動的にスキップしたり、指定した開始時刻にスキップしたりします。 Uri内の疑問符?は、Uriを消費しているものであれば何でも使用できる追加の引数をクエリパラメータとして使用できます。

これらはUriのコンテキスト内の特殊文字であるため、再生が最初は失敗していて、ファイルの名前が変更された後で動作します。あなたは がにUnsupportedEncodingException

がapplication/x-www-フォーム - に文字列を変換しスローURLEncoder.encode()

を使用してパブリック静的な文字列のエンコード(文字列s 文字列ENC)によってこれらの特殊文字をエスケープすることができます特定のエンコーディングスキームを使用して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

関連する問題