如何在我的Android应用程序的res / raw文件夹中播放mp3?

我在我的Android应用程序的res / raw文件夹中有一个小(200kb)的mp3。 我试图在Eclipse的模拟器中运行它。 它被认为是R文件中的资源,但是当我尝试准备/启动时,我的活动崩溃了! 还有其他我需要改变的东西,也许是在清单中吗?

 MediaPlayer mPlayer = MediaPlayer.create(FakeCallScreen.this,R.raw.mysoundfile);

尝试{
 mPlayer.prepare();
 mPlayer.start();
 } catch(IOException e){
 //稍后处理
 }

  • Android Media Player:开始调用状态4错误(-38,0)
  • 流式传输到Android MediaPlayer
  • Android:如何知道MediaPlayer是否暂停?
  • Android MediaPlayer获得音量
  • 两个Android手机之间的实时video流
  • 音频流缓冲
  • Android:点击TextView从原始资源播放mp3文件
  • Android MediaPlayer停止播放
  • 当启动活动时,即在onCreate上放置以下代码。

    public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MediaPlayer mPlayer = MediaPlayer.create(FakeCallScreen.this, R.raw.mysoundfile); mPlayer.start(); } 

    当停止活动时,即在onDestroy上输入以下代码。

      public void onDestroy() { mPlayer.stop(); super.onDestroy(); } 

    希望能帮助到你 :)

    您可能更喜欢使用SoundPool类。 它可以减少播放声音时的延迟,并提供其他一些细节,例如当有太多可以同时播放时能够优先处理声音。

    来自文档:

    SoundPool是一组样本,可以从APK内部的资源或文件系统中的文件加载到内存中。 SoundPool库使用MediaPlayer服务将音频解码为原始的16位PCM单声道或立体声流。 这允许应用程序附带压缩流,而不必承受CPU负载和播放期间解压缩的延迟。

    例如:

     /** * How many sounds can be played at once. */ private static final int MAX_SOUND_POOL_STREAMS = 4; /** * Modify this as part of your own priority scheme. Higher numbers mean higher * priority. If you don't care, it's okay to use the same priority for every * sound. */ private static final int NORMAL_PRIORITY = 10; private int mySoundId; @Override public void setupContent() { this.soundPool = new SoundPool(MAX_SOUND_POOL_STREAMS, AudioManager.STREAM_MUSIC, 100); this.mySoundId = this.soundPool.load(this.getApplicationContext(), R.raw.mySound, 1); } @Override private void playMySound() { this.soundPool.play(this.mySoundId, 1, 1, NORMAL_PRIORITY, 0, 1); } 

    这是我在项目中使用的静态方法。 我将它添加到我的Utils类:

      public static void playSound(final Context context, final SoundType type) { new Thread(new Runnable() { @Override public void run() { MediaPlayer mediaPlayer = new MediaPlayer(); int resId = -1; switch (type) { case INCOMING_NOTIFICATION: resId=R.raw.noti_sound; break; case SEND_BETTING_SLIP: resId=R.raw.slip_sent; break; case TRIVIA_RIGHT_ANSWER: resId=R.raw.game_bonus; break; case TRIVIA_WRONG_ANSWER: resId=R.raw.whistle_referee_trivia_bad_answer; break; } if (resId != -1) { mediaPlayer = MediaPlayer.create(context, resId); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setLooping(false); mediaPlayer.start(); while (mediaPlayer.isPlaying() == true) { } } } }).start(); } } 

    现在我定义一个Enum(SoundType)并将mp3文件放在res文件夹下的raw文件夹中。