2010-12-08 105 views
1

兩週前我發佈了我的第一個Android應用程序(一個名爲Agent Syndicate的MMO),除了聲音和音樂外,一切都運行良好!Android MP3 MediaPlayer崩潰一些手機

使用128kps的索尼Sound Forge Pro 10中創建的標準MP3文件,我立即收到許多用戶抱怨關於各種手機上的強制關閉問題的報告,這些手機主要運行Android 2.1和2.2。我發佈了一個關閉所有聲音的新版本,投訴停止。但是我真的很想聽到聲音,所以這很不理想。

我沒有資源來測試除了我的個人手機和模擬器之外的其他任何資源(其中一切都完美無缺),但很明顯,這對許多玩家來說都是一個主要問題!

我不應該使用MP3嗎?是否有一種通用方法最適合所有手機播放簡單的聲音文件?

這是我使用的,開始我的聲音效果是什麼:

final MediaPlayer player = MediaPlayer.create(GlobalState.Instance, resId); 
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
{ 
    public void onCompletion(MediaPlayer mp) 
    { 
     mp.release(); 
    } 
}); 
player.setVolume(0.5f, 0.5f); 
player.start(); 

我本來叫player.start()之前player.prepare(),但保留對某些聲音文件的獲取IllegalStateExceptions 。其中的一些信息在確切地調用這些方法的時候非常混亂,以及例外的含義。刪除player.prepare()使它在模擬器和我的本地dev設備上100%的時間工作。

回答

0

使用MediaPlayer進行音樂播放應該沒有問題,但對於音效,我會使用SoundPool類。我的猜測是你得到了IllegalStateExceptions,因爲你在播放器準備完成之前啓動了MediaPlayer。正確的方法是爲MediaPlayer引入一個onPreparedListener,並從那裏開始。您是否在主UI線程上進行MediaPlayer操作?

+0

要非常小心的SoundPool,因爲它解壓縮,在內存中,你添加到它的每一個聲音。僅用於超小聲音(<1s)。加載任何東西即使是很大的內容都會導致內存異常。 – ADB 2011-01-04 08:41:49