2017-10-07 6 views
1

私は以下の問題を抱えています:スピナーで2つのサウンドが重なっています

私はそれにさまざまな曲を持つスピナーを持っています。スピナーでは、ユーザーは選択したサウンドをプレビューできます。私はすでにその部分を開発しました。しかし、私の問題は、リストから1曲を選択すると、それが再生されるということです。その後、リストから別の曲を選択すると、Mediaplayerは前の曲も停止して再生しません。しかし、私が必要とするのは、ユーザーが別の曲を選択したときに前の曲を停止することです。ここで

は私のコードです...

//set onClickListner to the onItem SelectedListner 
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      choose_ringtone = (int) id; 
      // Toast.makeText(setAlarm.this,"The selected choice is "+ id,Toast.LENGTH_SHORT).show(); 
      String ringtSound = String.valueOf(parent.getItemAtPosition(position)); 
      //set ringtone options 
      switch (ringtSound) { 
       case "alarm Sound 1": 
        mp = MediaPlayer.create(setAlarm.this, R.raw.wake_up); 
        break; 
       case "alarm Sound 2": 
        mp = MediaPlayer.create(setAlarm.this, R.raw.alarm); 
        break; 
       case "alarm Sound 3": 
        mp = MediaPlayer.create(setAlarm.this, R.raw.wake_up_tone); 
        break; 
       case "alarm Sound 4": 
        mp = MediaPlayer.create(setAlarm.this, R.raw.sweet_alarm); 
        break; 
       case "alarm Sound 5": 
        mp = MediaPlayer.create(setAlarm.this, R.raw.morning_alarm); 
        break; 
       default: 
        break; 

      } 
      if(mp!=null) { 
       mp.start(); 

      } 

答えて

0

switch文の前に、あなたは

if (mp != null && mp.isPlaying()) { 
    mp.stop(); 
} 

ような何かを行うことができ、私はあなたのコードの残りの部分がどのようなものかわからないけど、してくださいまた、Android Developersのヒントにも従っていることを確認してください。具体的には、

MediaPlayerオブジェクトが使用されなくなったらすぐにrelease()を呼び出して、MediaPlayerオブジェクトに関連付けられた内部プレーヤーエンジンによって使用されるリソースをすぐに解放できるようにします。リソースには、ハードウェアアクセラレーションコンポーネントなどのシングルトンリソースが含まれている可能性があります。release()を呼び出さないと、MediaPlayerオブジェクトの後続インスタンスがソフトウェア実装にフォールバックするか、完全に失敗する可能性があります。 MediaPlayerオブジェクトが終了状態になると、もう使用できなくなり、他の状態に戻すこともできなくなります。

+0

Thanks.Its作業の前にmp.stop();を試してみてください。また、isPlaying()を使ってmediaplayerが動作しているかどうかをチェックします。しかし、私はスイッチのケースの後にそれを使用した。私はそのケースだと思う。何らかのアドバイスのおかげで再び.. – Sampath

+0

よく聞く! [回答を受け入れる](https://meta.stackexchange.com/questions/14994/do-you-feel-dirty-if-you-nudge-new-users-to-accept-your-answer-the-the-the- indicat)はここで感謝の言葉を言う良い方法です。 – Bill

0

これを試してください前にstart Play以下の機能を呼び出してください。

switch (ringtSound) { 
       case "alarm Sound 1": 
         stopPlaying() 
        mp = MediaPlayer.create(setAlarm.this, R.raw.wake_up); 
        mp.start(); 
        break; 
      } 

音を止める機能を呼び出します。

private void stopPlaying() { 
       if (mp != null) { 
        mp.stop(); 
        mp.release(); 
        mp = null; 
       } 
       } 
0

任意のサウンドを開始...

関連する問題