在资源文件夹中播放 mp3 文件不起作用

play mp3 file in resource folder not working

我想播放 res/raw 文件夹中的 mp3 文件。
但是我得到错误 "error (1, -2147483648)" 和 mp.prepare()

上的 IOException

我的代码

try {
        MediaPlayer mPlayer = MediaPlayer.create(NavigationHome.this, R.raw.notfy);
        mp.prepare();
        mp.start();
    } catch (Exception e) {
        e.printStackTrace();
    }

我也试过

try {
        mp.setDataSource(NavigationHome.this, Uri.parse("android.resource://com.hipay_uae/res/raw/notfy"));
        mp.prepare();
        mp.start();
    } catch (Exception e) {
        e.printStackTrace();
    }

我尝试过的另一个解决方案

AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
MediaPlayer player = new MediaPlayer();
player.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
player.prepare();
player.start();

这些也不适合我。

试试这个

String fname="your_filename";
int resID=getResources().getIdentifier(fname, "raw", getPackageName());
MediaPlayer mediaPlayer=MediaPlayer.create(this,resID);
mediaPlayer.start();

在准备媒体播放器或为其设置数据源之前尝试初始化您的媒体播放器

从外部目录播放

String filePath = Environment.getExternalStorageDirectory()+"/folderName/yourfile.mp3";
mediaPlayer = new  MediaPlayer();
mediaPlayer.setDataSource(filePath);
mediaPlayer.prepare();   
mediaPlayer.start()

来自原始文件夹

 MediaPlayer mediaPlayer = MediaPlayer.create(MainActivity.this,R.raw.song);
 mediaPlayer.start();

如果你能post你问题中的 StackTrace 会更有帮助。

但是,根据您问题中的信息,以下代码应该可以播放 raw 资源文件夹中的媒体文件。

如果您使用 create() 方法,prepare() 会在内部调用,您不需要显式调用它.

MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.notify);
mediaPlayer.start();

但是,要考虑的一点是 prepare() 通常会抛出一个 IllegalStateException,而在您的情况下,您会得到一个 IOException.因此,值得检查文件是否确实存在于原始文件夹中 and/or 文件已损坏。