2016-06-17 7 views
-1

Итак, у меня есть кнопка, которая воспроизводит выбранный файл. Однако я хочу приостановить воспроизведение, когда кнопка снова нажата. Я проверил несколько сообщений и учебников StackOverflow, и метод паузы - это то, что было использовано в большинстве случаев. Однако это не работает для меня. Звук продолжает воспроизводиться. Я что-то упустил или есть проблема с моим кодом? Любая помощь приветствуется. Благодаря!Android MediaPlayer не будет останавливаться

buttonPlay.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String fileName = getFileSelected(); 
       MediaPlayer m = new MediaPlayer(); 
        if (!m.isPlaying() && (getFileSelected().endsWith(".3gp") || getFileSelected().endsWith(".wav"))) { 
        try { 
         m.setDataSource(getActivity().getApplicationContext().getExternalFilesDir(null).toString() + File.separator + fileName); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } catch (IllegalArgumentException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } catch (IllegalStateException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         try { 
          m.prepare(); 
         } catch (IllegalStateException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 
          isPlaying = true; 
          buttonPlay.setText("Stop"); 
         m.start(); 
         Toast.makeText(getActivity().getApplicationContext(), "Playing audio", Toast.LENGTH_LONG).show(); 
        } 
        else{ 
//       m.stop(); 
//       m.release(); 
//       m = null; 
          m.pause(); 
          isPlaying = false; 
          setButtonLabel(R.id.btnPlay, "Play Selected Recording"); 
         } 

      } 
     }); 
+1

Вы делаете ту же ошибку, как [здесь] (http://stackoverflow.com/questions/6234838/mediaplayer-pause-doesnt-work-in-android), Вы не должны инициализировать новый экземпляр «MediaPlayer» внутри 'onClick'. –

ответ

2

Ваш MediaPlayer не паузу потому, что вы извлечения музыкальных файлов, инициализирует MediaPlayer, готовя его и начать медиа-плеер каждый раз, когда нажата кнопка!

Вы должны инициализировать медиаплеер только один раз и на другой стороне, нажав кнопку прослушивания кнопки, и просто запустите или приостановите его при нажатии кнопки.

String fileName = getFileSelected(); 
MediaPlayer m = new MediaPlayer(); 

buttonPlay.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

       if (!m.isPlaying() && (getFileSelected().endsWith(".3gp") || getFileSelected().endsWith(".wav"))) { 
       try { 
        m.setDataSource(getActivity().getApplicationContext().getExternalFilesDir(null).toString() + File.separator + fileName); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } catch (IllegalArgumentException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IllegalStateException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        try { 
         m.prepare(); 
        } catch (IllegalStateException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
         isPlaying = true; 
         buttonPlay.setText("Stop"); 
        m.start(); 
        Toast.makeText(getActivity().getApplicationContext(), "Playing audio", Toast.LENGTH_LONG).show(); 
       } 
       else{ 
//       m.stop(); 
//       m.release(); 
//       m = null; 
          m.pause(); 
          isPlaying = false; 
          setButtonLabel(R.id.btnPlay, "Play Selected Recording"); 
         } 

      } 
     }); 
1

этот код наверняка работает.Попробуйте.

public AudioManager audioManager = null; 
public boolean playing; 
Button btnRequestFocus = (Button) findViewById(R.id.btnRequestFocus); 

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

      boolean gotFocus = requestAudioFocusForMyApp(MainActivity.this); 
      if (gotFocus) { 
       //play audio. 

      } 
     } 
    }); 


    Button btnReleaseFocus = (Button) findViewById(R.id.btnReleaseFocus); 
    btnReleaseFocus.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Stop playing audio. 
      releaseAudioFocusForMyApp(MainActivity.this); 
     } 
    }); 
} 

private boolean requestAudioFocusForMyApp(final Context context) { 

    AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 

    // Request audio focus for playback 
    int result = am.requestAudioFocus(afChangeListener, 
      // Use the music stream. 
      AudioManager.STREAM_MUSIC, 
      // Request permanent focus. 
      AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE); 

    if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
     Log.d("AudioFocus", "Audio focus received"); 

     return true; 
    } else { 
     Log.d("AudioFocus", "Audio focus NOT received"); 
     return false; 
    } 
} 

void releaseAudioFocusForMyApp(final Context context) { 
    AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
    tts.stop(); 

    am.abandonAudioFocus(afChangeListener); 
} 
AudioManager.OnAudioFocusChangeListener afChangeListener = new  AudioManager.OnAudioFocusChangeListener() { 
    public void onAudioFocusChange(int focusChange) { 
     if (focusChange == AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE) { 
      // Lower the volume 
     } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { 
      // Raise it back to normal 
     } 
    } 
0
if (m.isPlaying()) { 
    m.pause(); 
    isPlaying = false; 
    setButtonLabel(R.id.btnPlay, "Play Selected Recording"); 
} else { 
    Toast.makeText(this, "Media Player is not playing", Toast.LENGTH_LONG).show(); 
}