2017-04-17 189 views
0

我在第一次應用程序旅程中遇到了另一個錯誤:)我想在應用程序加載時播放聲音。這是一個.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; 
      } 
     }); 
    } 
} 

回答

0

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

我只是做了一遍,這次它工作。也許我搞砸了文件名或某種類型。謝謝! –

0

你爲什麼用最後? 可以播放MP3與

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

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

public void onDestroy() { 

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

} 
+0

最後的結果被使用,所以我可以'從內部類訪問mp'。雖然如果我做了這個函數,它必須在無論如何聲明'mp'的地方,所以它肯定需要是最終的。 –