2010-11-12 88 views
16

我在我的android應用程序的res/raw文件夾中有一個小的(200kb)mp3。我試圖從Eclipse的模擬器中運行它。它被認爲是R文件中的一個資源,但是當我嘗試準備/開始時,我的活動崩潰了!還有什麼我需要改變,也許在清單?如何在我的android應用程序的res/raw文件夾中播放mp3?

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

try { 
mPlayer.prepare(); 
mPlayer.start(); 
} catch (IOException e) { 
// handle this later 
} 
+0

把logcat輸出放在這裏,否則我們無法識別錯誤。 – 2010-11-12 06:53:27

回答

54

當開始活動,即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(); 

} 

希望它能幫助:)

+0

你也可以查看這個網站的更詳細的教程http://marakana.com/forums/android/examples/59.html – 2010-11-12 06:54:57

+0

它做到了!哈哈顯然我不需要mPlayer.prepare(),謝謝:) – damonkashu 2010-11-12 07:05:13

+0

:)沒問題兄弟 – 2010-11-12 07:09:47

5

你可能會喜歡使用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); 
} 
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(); 

     } 
} 

現在我defind枚舉(SoundType),並放置MP3文件中的原始文件夾下 res文件夾。

相關問題