2017-11-29 6 views
0

私は簡単なアプリケーションをコーディング/ダイヤルするようにコーディングしています。私はMediaPlayerクラスでサウンドを実装しようとしているので、ユーザーがボタンをクリック/タップするたびにサウンドが再生されます。それは動作していますが、30回のクリック後、サウンドは再生されません。アプリを再起動した後にのみ、30回クリックするだけで音が鳴り、エラーが発生します。Android MediaPlayerが30再生後にエラーを投げる

私はSoundPoolクラスも試しましたが、30回のクリック後に音が聞こえません。どんな解決策ですか?

onButtonClick方法:

MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.button_sound); 
     mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 

     try { 
      if (mp.isPlaying()) { 
       mp.stop(); 
       mp.release(); 
      } else { 
       mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mp) { 
          mp.start(); 
        } 
       }); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

エラーログ:

11-29 23:01:03.632 12572-12572/com.phonecalldemo E/MediaPlayer-JNI: QCMediaPlayer mediaplayer NOT present 11-29 23:01:03.662 12572-12572/com.phonecalldemo E/MediaPlayer: Should have subtitle controller already set 11-29 23:01:03.672 12572-12572/com.phonecalldemo E/MediaPlayer: error (-19, 0) 11-29 23:01:03.682 12572-12572/com.phonecalldemo E/MediaPlayer: Error (-19,0)

+0

なぜこのような現象が発生しているのかわからない理由は何ですか?それは毎回同じ数字ですか?デバイスを回転させたようなことが起こった可能性はありますか?また、問題の一部であるかもしれない 'getApplicationContext()'ではなく、 'this'をコンテキストとして使うべきです。 (これはそれ自体が文脈であるアクティビティです) –

+0

30回クリックしてみてください(1-3回変わります)。回転していないデバイスはありません。私は自分のアクティビティで画面の向きをポートレートに設定します。私はgetApplicationContextを 'this'に変更しましたが、それはまだ同じです。私はそのエラーを受け取ります: E/MediaPlayer:サブタイトルコントローラが既に設定されている必要があります 11-30 11:40:57.080 12114-12114/com.phonecalldemo E/MediaPlayer-JNI:QCMediaPlayer mediaplayer NOT present – StefanJo

+0

Googleを見てください'MediaPlayer:既にサブタイトルコントローラが設定されているはずです.'私は多くの質問と回答を見つけました。 –

答えて

0

UPDATE:

私はそれらのために、ここに私の新しいコードがあり、解決策を見つけましたあなたはまだこの種の問題があるあなたのエラー:

final MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.button_sound); 
     mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 

       mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
        @Override 
        public void onPrepared(MediaPlayer mp) { 
         mp.start(); 
        } 
       }); 
       mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
        @Override 
        public void onCompletion(MediaPlayer mediaPlayer) { 
         mp.release(); 
        } 
       }); 
関連する問題