2011-02-12 134 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)。开始();

我不太确定那里有什么区别,但是它解决了我的问题。