2016-10-12 4 views
0

ボタンをクリックすると音が鳴る小さなアプリを作ろうとしています。しかし、私はその音を演奏することができません。問題が何であるか分かりません。これで私を助けてください。以下はコードです。Android Studio- Media Playerでサウンドが再生されないGenymotion?

public class MainActivity extends AppCompatActivity { 

    private Button button; 
    private MediaPlayer mediaPlayer; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mediaPlayer = new MediaPlayer(); 
     mediaPlayer = MediaPlayer.create(getApplicationContext(),R.raw.song); 


     button = (Button)findViewById(R.id.mediaButtonId); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       mediaPlayer.start(); 

      } 
     }); 
    } 

} 

注:私のgenymotionとの問題は、誰もが私のためのソリューションを提案してくださいemulator.Canので、-sorry男は、私は問題は私のコードであることを考えたが、アプリは自分の携帯電話上で完璧に実行されていますこれで、私はMac OSXを使用しています。

答えて

1

MediaPlayerには独自のライフサイクルがあります。インスタンスを作成してから再生を開始することはできません。まずそれを準備してからそれを再生しなければなりません。

あなたは、同期または非同期でメディアプレーヤーを準備できます。

MediaPlayer mediaPlayer= new MediaPlayer(); 
mediaPlayer=MediaPlayer.create(getApplicationContext(),R.raw.song); 

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
@Override 
public void onPrepared(MediaPlayer mediaPlayer) { 
    mediaPlayer.start(); 
} 
}); 
mediaPlayer.prepareAsync(); 

それとも、あなたは同期

MediaPlayer mediaPlayer= new MediaPlayer(); 
    mediaPlayer=MediaPlayer.create(getApplicationContext(),R.raw.song); 
    try { 
     mediaPlayer.prepare(); 
    } catch (IOException e){ 

    } 
    mediaPlayer.start(); 

それを実行したい場合はちょうどあなたがそれを再生する前に、あなたはそれを準備してください:の線に沿って

何か。

メディアプレイヤーのライフサイクル:あなたはそれを再生することができます前に、あなたのようなので、onPreparedListenerはあなたのためにこれを処理するために設定して、メディアプレーヤーは、準備ができていることを確認する必要がありhttps://developer.android.com/reference/android/media/MediaPlayer.html

+0

私は試しましたが、私は不幸になっています例外:例外 –

+0

エラーメッセージは何ですか? –

+0

stackTraceでは、prepare()呼び出しがある行に "IllegalStateExceptionに起因する"と表示されています。私はいくつかのサイトを参照しています。いくつかのprepare()呼び出しがこの例外を引き起こすと言っています。 –

0

MediaPlayer mp = new MediaPlayer(); 

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

mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mediaPlayer) { 
     mp.start(); 
    } 
}); 

button = (Button)findViewById(R.id.mediaButtonId); 

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     mp.prepareAsync(); 
    } 
}); 

このようにしてボタンを押してから音が鳴るまでに少し時間がかかります。それを行う別の方法は、メディアプレーヤーが準備し、ボタンのオンクリックでボタンが有効になったときにと呼ぶことができるまで、ボタンを無効にすることです。

+0

私はエミュレータで問題が発生していると思います。私はisPlaying()メソッドを使用すると、コードが正常に実行されていることを示すtrueを示しています。しかし、私は音を聞くことができません –

+0

実際のデバイス@SaiSankalp – MichaelStoddart

+0

ええええええええええええええええええええええええええええええええええればうまくいきましたが、エミュレータの問題点を理解できません@MichealStoddart –

関連する問題