2011-02-12 235 views
10

我已經寫了我能想到的最基本的應用程序來嘗試播放mp3文件,但它不起作用。我沒有收到任何錯誤,但是當應用程序啓動時,聲音不會播放。android MediaPlayer不能播放mp3文件

public class soundtest extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     MediaPlayer mp = new MediaPlayer(); 
     mp.create(getApplicationContext(), R.raw.norm_iphone_money); 
     mp.start(); 
    } 
} 

我錯過了什麼? res/raw文件夾中有「norm_iphone_money.mp3」。該文件在Windows Media Player和iTunes中可以正常播放。

我正在使用最新版本的Java SDK和Eclipse for Java。該應用程序針對Android 2.2,儘管沒有聲音,但在模擬器中運行良好。

+0

您是否嘗試過使用真實設備? 你可以嘗試在MediaPlayer的start()方法之前使用setDataSource()和prepare()方法,而不是create(),但是我懷疑如果create()不會工作...... – DJC 2011-02-12 04:29:55

回答

9

嘗試更換這兩行:

MediaPlayer mp = new MediaPlayer(); 
mp.create(getApplicationContext(), R.raw.norm_iphone_money); 

與這一行:

MediaPlayer mp = MediaPlayer.create(this, R.raw.norm_iphone_money); 

,看看是否有效。

+7

如果這兩個是寫作的話在編譯的代碼中任何邏輯上不同的東西,我都會感到震驚。 – DJC 2011-02-12 04:31:32

+1

不,但自己測試它只能這樣工作,它不起作用,他最初寫它。如果任何人都在意解釋究竟是爲什麼,那就太好了。播放RAW音頻資源在此處描述http://developer.android.com/guide/topics/media/index.html – ShadowGod 2011-02-12 06:35:43

+5

當然,它在邏輯上是不同的。 mp.create將調用靜態方法,它將返回一個MediaPlayer的新實例,該實例從不存儲。然後,他在默認構造的實例上調用start()。 – Yuyo 2011-07-18 06:15:31

-2

應該以靜態方式訪問MediaPlayer類型的靜態方法create(Context,int)。試試這個:

MediaPlayer.create(getApplicationContext(), R.raw.norm_iphone_money).start(); 

它將發揮.MP3這一行太

mp.create(getApplicationContext(), R.raw.norm_iphone_money).start(); 
35

的問題是,媒體音量設置爲0(不振鈴音量)。你可以通過設置:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0); 
-3

我建議這樣的:

MediaPlayer mp = new MediaPlayer(); 
//bla bla bla 
mp = MediaPlayer.create(getApplicationContext(), R.raw.norm_iphone_money); 
-4

有同樣的問題 後我點擊啓動媒體播放器,屏幕一黑和應用程序停止。

我只是改變

MediaPlayer的熔點= MediaPLayer.create(此,R.raw.sound); mp.start();

MediaPlayer的熔點= MediaPLayer.create(此,R.raw.sound)。開始();

我不太確定那裏有什麼區別,但是它解決了我的問題。