here(ContentResolver
を使用)のように電話にメディアがありますが、返されるパスは/storage/emulated/0/...
の形式です。の場合はJava.IO.FileNotFoundException
となります。私はこのパスが実際のパスではないことを理解していますが、このパスから実際のパスを取得するにはどうすればよいですか?MediaPlayer.SetDataSource()を '/ storage/emulated/0/...'に設定します。
プロジェクトフォルダに資産があると、MediaPlayer
はうまく動作します。しかし、私はそれを他のファイルと連携させることはできません。私はすでにREAD_EXTERNAL_STORAGE
の許可を設定しました。
私はむしろC#で答えを持っていますが、Javaでの回答で十分でしょう。
EDIT
私は似たものを扱ういくつかの答えを見てきましたが、それらはすべて私がUri
を持っていると仮定します。上記のメソッドは文字列を返します。私はそれをUriに変換しようとして成功していないので、私はそれらのソリューションをテストすることすらできません。
マニフェストファイルにアクセス権を追加することを忘れないでください。実際のパスではありません " - 確実に'/storage/emulated/0/'に間違いはありません。ファイルが存在するかどうかは別の問題です。 "私はすでにREAD_EXTERNAL_STORAGEの許可を設定しています。" - 私はXamarinがどのように実行時のアクセス権を処理するのか分かりませんが、あなたもそれが必要です。また、使用しているアプローチがすべてのメディア(リムーバブルストレージのメディアなど)では機能しないことにも注意してください。 – CommonsWare
@CommonsWareそれはリムーバブルメディア上にありません。それは私がUSBケーブルとWindowsエクスプローラを使って電話機に置いたファイルです。そして、パスは、質問で述べた方法で 'Data'として返されます。だから何が問題だろうか? – ispiro
私は[ランタイムのアクセス許可](https://developer.android.com/training/permissions/requesting.html)を可能性として挙げました。 – CommonsWare