在Android上播放声音

问题描述:

我在第一次应用程序旅程中遇到了另一个错误:)我想在应用程序加载时播放声音。这是一个.wav文件。它持续2秒,但当我在旧三星S4上运行应用程序时,它不会播放。 IDE中没有任何错误,或者我可以看到的任何错误,我检查过“mp”是否有值并且确实如此。环顾职位,大多数人都有'mp'= null的问题。而我的价值只是没有声音从电话里出来......再次,任何帮助表示赞赏!在Android上播放声音

public class OpeningScreen extends Activity { 
    @Override 
    // create the screen state 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // connect the xml layout file 
     setContentView(R.layout.activity_opening_screen); 

     final MediaPlayer mp = new MediaPlayer(); 
     mp.create(this, R.raw.welcome_message); 

     mp.start(); 

     // create the on touch listener 
     ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.opening_layout); 

     layout.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       // change the screen to a new state 
       Intent intent = new Intent(OpeningScreen.this, GameScreen.class); 

       // start the new activity 
       startActivity(intent); 

       // stop welcome sound (if still playing) 
       mp.stop(); 
       return true; 
      } 
     }); 
    } 
} 

public static MediaPlayer create(Context context, int resid)是为给定资源ID创建MediaPlayer的静态方法。 这意味着通过调用create,您正在创建一个没有参考用法的媒体播放器的新实例。

尝试改变

final MediaPlayer mp = new MediaPlayer(); 
mp.create(this, R.raw.welcome_message); 

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

而且选手应该工作。

+0

这就是我的第一次。但通过这行代码后,mp仍然是空的。 –

+0

我只是做了一遍,这次它工作。也许我搞砸了文件名或某种类型。谢谢! –

最好通过MediaPlayer.setOnPreaparedListener注册OnPreapredListener,准备好后开始播放媒体。

http://developer.android.com/guide/topics/media/mediaplayer.html

你为什么用最后? 可以播放MP3与

MediaPlayer mp = MediaPlayer.create(OpeningScreen.this, R.raw.welcome_message); 
mp.start(); 

也停止媒体播放器是更好,如果你的onDestroy停止。

public void onDestroy() { 

    mp.stop(); 
    super.onDestroy(); 

} 
+0

最后的结果被使用,所以我可以'从内部类访问mp'。虽然如果我做了这个函数,它必须在无论如何声明'mp'的地方,所以它肯定需要是最终的。 –