2017-01-08 9 views
1

私はSDカードに保存されたmp3ファイルを再生しようとしています。私はエミュレータを使用していませんが、Samsung Galaxy S3とcyanogenmod 13 android 6.0を使用しています。SDカードへのuri方法mp3ファイル

まず私は

Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/gato.mp3")

と試みたが、

Environment.getExternalStorageDirectory().getPath() は/ストレージに私を取得//0をエミュレート。

  1. 内蔵ストレージは/ /ストレージに置か/ 0エミュレートされています。自分の携帯電話でのファイルマネージャで

    は私が3つのメモリ記憶場所を参照してください。
  2. sdcard1は/ storage/FE97-A11B
  3. である。

私のコンピュータから見たものとは異なります(sdcard1と内部ストレージのみ)。

内部とsdcard1の両方にファイル "gato.mp3"を置くことができませんでした。確認できます。しかし、私のファイルに私を取得する必要がありますパス/storage/emulated/0/gato.mp3を与える

Environment.getExternalStorageDirectory().getPath()+"/gato.mp3"

で、また/ストレージ/ FE97-A11Bへのパスを手動で設定しようとしています/gato.mp3、uriで作成されたmediaplayerはnullであり、ファイルは見つかりません。 コンピュータエクスプローラに表示されるパスを試しても同じです。

誰もがファイルを見つけることができない理由を知っていますか? "/"を削除しようとしましたが、 "mnt"を追加してパスに何かがないかどうかを確認しましたが、何も動作していないようです。

ありがとうございました!チェックする

私のコードは、単に機能TV1は、TextViewにあるので、私は、URIが指しているどのパスを確認でき

public void ejecutar(View v) { 

    Uri datos = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/gato.mp3"); 

    MediaPlayer mp = MediaPlayer.create(this, datos); 

    if (mp != null) { 
     mp.start(); 
    } 
    else{ tv1.setText(datos.toString());} 

です。

答えて

0

私はあなたがremovable storage上で任意のファイルシステムの場所へのアクセスを持っていない私のSDカードに

を保存されたMP3ファイルを再生しようとしています。

Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/gato.mp3") 

パスを組み立てるときは絶対に連結を使用しないでください。そして、create(Context, Uri)fileUriスキームで動作するかどうかはわかりません。

File media=new File(Environment.getExternalStorageDirectory(), "gato.mp3"); 

を使用してからsetDataSource(media.getAbsolutePath())を使用することをおすすめします。また、READ_EXTERNAL_STORAGEまたはWRITE_EXTERNAL_STORAGEの許可が必要です。これはまた、runtime permissionsを処理する必要があることを意味します。

しかしEnvironment.getExternalStorageDirectory().getPath()のAndroid SDKがexternal storageとを意味し、あなたがあなたの問題の内部ストレージと呼ぶものの典型的なパスである/storage/emulated/0

に私を取得します。 SDKが内部ストレージと呼ぶものはsomething elseです。

+0

これは主な経路です。私はあなたが提案したようにファイルメディアを作成しました。私はmedia.toString()を出力し、実際には/storage/emulated/0/gato.mp3にファイルがあります。私が正しいことをしているかどうかはわかりません。私は、Mediaplayer mp = new Mediaplayer()を作成しました。 設定した後: mp.setDataSource(media.getAbsolutePath()) Androidスタジオはtry {} catch {}でラップする必要があり、mp.start()を呼び出しても何も起こりません。 MediaPlayerで何かを初期化するのを忘れましたか? ありがとう – Oscarb