简体   繁体   English

在Android 2.3上使用MediaPlayer播放SD卡中的声音

[英]Play sound from sdcard with MediaPlayer on android 2.3

This works with android 4.2: 这适用于android 4.2:

SOUNDS_DIR = getFilesDir().getAbsolutePath() + "/";
SoundToPlay = new MediaPlayer();
SoundToPlay.setDataSource(SOUNDS_DIR + ResourceID
        + ".mp3");
SoundToPlay.prepare();
SoundToPlay.start();

When i run it on android 2.3, LogCat prints: 当我在android 2.3上运行它时,LogCat会打印:

MediaPlayer error(1, -2147483648) MediaPlayer错误(1,-2147483648)

If i use the exactly same file as resource (/res/raw/), works fine also with 2.3 如果我使用与资源(/ res / raw /)完全相同的文件,则在2.3上也可以正常工作

Maybe try before to validate your path, like: 也许先尝试验证路径,例如:

File path = Environment.getExternalStoragePublicDirectory(
    Environment.DIRECTORY_MUSIC);
 File file = new File(path, ResourceID+".mp3");

 // if file exists ....

After you can write: 写完之后:

SoundToPlay = new MediaPlayer();
SoundToPlay.setDataSource(path + "/" + ResourceID  + ".mp3");
SoundToPlay.prepare();
SoundToPlay.start();

[EDIT] [编辑]

Instead of 代替

SoundToPlay.setDataSource(SOUNDS_DIR + ResourceID + ".mp3");

set

FileInputStream fileInputStream = new FileInputStream(SOUNDS_DIR + ResourceID
    + ".mp3");
SoundToPlay.setDataSource(fileInputStream.getFD());         
SoundToPlay.prepare(); 

Try this: 尝试这个:

String path = Environment.getExternalStorageDirectory() + "/sound.mp3";
File file = new File(path);
Uri uri = Uri.fromFile(file);
MediaPlayer mp = MediaPlayer.create(this, uri);

if (mp != null)
{
   mp.setOnCompletionListener(new OnCompletionListener() {
      @Override
      public void onCompletion(MediaPlayer mp) {
         mp.release();
      }
   });
   mp.start();
}

Good Luck. 祝好运。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM