MediaPlayer URI

时间:2017-12-25 06:28:58

标签: java android file android-mediaplayer

String path = Environment.getExternalStorageDirectory().toString()+"/Music/";
    File directory = new File(path);
    File[] mSongsList = directory.listFiles();

    Uri mUri= Uri.fromFile(mSongsList[0]);
    Log.v("MainActivity",mUri.toString());
    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mMediaPlayer.setDataSource(this, mUri);
    mMediaPlayer.prepare();
    mMediaPlayer.start();

我正在尝试播放列表中的第一首歌,但是, 我在setDataSource上收到错误。

它说" 未处理的异常:java.io.IOException "

5 个答案:

答案 0 :(得分:2)

将音乐文件放置在res / raw或SD卡下的任何其他文件夹下。我们将参考基于Uri的音频文件。

创建MediaPlayer对象:

MediaPlayer mPlayer = new MediaPlayer();

找到音频文件:

Uri myUri1 = Uri.parse("file:///sdcard/Songs/ARR Hits/hosannatamil.mp3");

设置媒体播放器的音频流类型:

mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

将数据源设置为内容Uri:

try {
    mPlayer.setDataSource(getApplicationContext(), myUri1);
} catch (IllegalArgumentException e) {
    Toast.makeText(getApplicationContext(), "You might not set the URI 
    correctly!", Toast.LENGTH_LONG).show();
} catch (SecurityException e) {
    Toast.makeText(getApplicationContext(), "You might not set the URI 
    correctly!", Toast.LENGTH_LONG).show();
} catch (IllegalStateException e) {
    Toast.makeText(getApplicationContext(), "You might not set the URI 
    correctly!", Toast.LENGTH_LONG).show();
} catch (IOException e) {
    e.printStackTrace();
}

准备播放器同步播放:

try {
    mPlayer.prepare();
} catch (IllegalStateException e) {
    Toast.makeText(getApplicationContext(), "You might not set the URI 
    correctly!", Toast.LENGTH_LONG).show();
} catch (IOException e) {
    Toast.makeText(getApplicationContext(), "You might not set the URI 
    correctly!", Toast.LENGTH_LONG).show();
}

启动播放器:

mPlayer.start();

以上信息取自以下链接:

https://programmerguru.com/android-tutorial/android-mediaplayer-example-play-from-uri/

答案 1 :(得分:0)

将您的代码保留在try-catch区块内。

try{
// your code
}catch(IOException exception){

}

这是因为您正试图获取music file。如果它不存在那么它将抛出IOException,所以你必须处理它。

答案 2 :(得分:0)

替换您的代码如下:

注意:确保您在MusicDirectory中有一些音乐。

    String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath();
                File directory = new File(path);
try{
 File[] mSongsList = directory.listFiles();

                Uri mUri= Uri.fromFile(mSongsList[0]);
                Log.v("MainActivity",mUri.toString());
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mMediaPlayer.setDataSource(this, mUri);
                mMediaPlayer.prepare();
                mMediaPlayer.start();
}catch(IOException exception){
    e.printStacktrace();
}

答案 3 :(得分:0)

首先确保您在清单文件中具有读取权限。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

如果您使用的是Android版Marshmallow或以上,则需要向用户询问Runtime Permissions

This是一篇很好的文章来请求运行时权限。

现在,您可以转到应用信息页面并手动授予权限。它将开始工作。

如下图所示: enter image description here

答案 4 :(得分:0)

您可以按照以下代码从设备中播放歌曲,但是我不知道如何播放下一首和上一首歌曲,如果您有任何想法,请与我分享。

fun getURI(){
    val path: String =
        Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath()
    val directory = File(path)

    try {
         mSongsList= directory.listFiles()
        val mUri = Uri.fromFile((mSongsList as Array<File>?)!![0])
        Log.v("MainActivity", mUri.toString())

        mp!!.reset()
        mp!!.setAudioStreamType(AudioManager.STREAM_MUSIC)
        mp!!.setDataSource(this, mUri)
        mp!!.prepare()
        mp!!.start()
    } catch (e: IOException) {
        e.printStackTrace()
    }
}