setDataSource Failed 问题

setDataSource Failed 问题

有关于安卓MediaPlayer出现setDataSource Failed问题;
原始的代码如下:

String str = musicList.get(position).getUrl();
try {
     mediaPlayer.setDataSource(str );
     mediaPlayer.prepare();
 }catch (Exception e){
     e.printStackTrace();
 }
 if(!mediaPlayer.isPlaying()) {
     mediaPlayer.start();
 }
}

musicList存放着手机里歌曲的信息,按道理来说mediaPlayer.setDataSource(str );就应该可以得到当前歌曲的路径但是结果手机无反应,出现 setDataSource Failed

1.首先确定手机是否给了权限



以及

if(ContextCompat.checkSelfPermission(MusicActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE
    ) != PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(MusicActivity.this, new String[]{Manifest
        .permission.WRITE_EXTERNAL_STORAGE}, 1);
    }else {
        initMediaPlayer();
    }

    if(ContextCompat.checkSelfPermission(MusicActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE
    ) != PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(MusicActivity.this, new String[]{Manifest
                .permission.READ_EXTERNAL_STORAGE}, 2);
    }else {
        initMediaPlayer();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode){
        case 1:
            if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                initMediaPlayer();
            }else {
                Toast.makeText(this, "没有权限授权", Toast.LENGTH_SHORT).show();
            }
        case 2:
            if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                initMediaPlayer();
            }else {
                Toast.makeText(this, "没有权限授权", Toast.LENGTH_SHORT).show();
            }
            break;
            default:
    }
}

2.如果给了那么就是路径的问题 我们这样访问得到的路径 str 格式是/storage/emulated/0/…
这并不是文件的真实路径我们需要把前面的**/storage/emulated/0**替换为 /sdcard这样路径才是真实路径所以我们应该这样修改

String str = musicList.get(position).getUrl();
   String[] dataStr = str.split("/");
   String fileTruePath = "/sdcard";
   for(int i=4;i

这样得到的fileTruePath 才是真实路径可以对文件进行操作;

你可能感兴趣的:(安卓)