Come disattivare MediaPlayer in AndroidCome disattivare MediaPlayer in Android
risposta
Questo codice ha funzionato per me,
MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
mp.start();
per Muto
mp.setVolume(0,0);
& Unmute o pieno volume
mp.setVolume(1,1);
È possibile che si desideri attenuare/disattivare il suono anziché impostarlo immediatamente su volume pieno (1.0f) o zero (0.0f).
E 'un po' difficile, perché è necessario un compito asincrona per mantenere la vostra applicazione reattivo:
mpMain è il mio esempio MediaPlayer per riprodurre la musica di sottofondo loop. Mi interessa anche in OnPause() e OnResume().
Metodo playBackgroundMusic viene utilizzato per attivare la musica, fadeOutBackgroundMusic trasforma la musica spento, ma dissolvenza volume per 0,5 secondi (10 * 50, vedere mentre e Thread.sleep).
Il mio volume di base è 0.8f, è possibile che si desideri rendere un parametro dell'attività asincrona o utilizzare una variabile globale statica.
public void playBackgroundMusic(Boolean isOn){
if(isOn){
// prevent conflics with async fade-out task
if(mtask_fadeout_music!=null){
mtask_fadeout_music.cancel(true);
mtask_fadeout_music=null;
}
if(mpMain==null){
mpMain = MediaPlayer.create(this, R.raw.zin___piano_2_140bpm_32158);
mpMain.setLooping(true);
mpMain.setVolume(0.8f,0.8f);
mpMain.start();
}
}
else{
if(mtask_fadeout_music==null){
fadeOutBackgroundMusic();
}
}
}
public void fadeOutBackgroundMusic(){
mtask_fadeout_music = (FadeOutMusic)new FadeOutMusic().execute();
}
//
// background processing ... fade out music stream
//
public class FadeOutMusic extends AsyncTask<String,Integer,String> {
@Override
protected String doInBackground(String... args) {
float level = 0.8f;
int i = 1;
while(i<50){
i++;
if(mpMain != null){
level=level*0.9f;
mpMain.setVolume(level, level);
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return "dummy";
}
@Override
protected void onPostExecute(String dummy) {
if(mpMain != null){
mpMain.setVolume(0,0);
mpMain.release();
mpMain = null;
}
if(mtask_fadeout_music!=null){
mtask_fadeout_music = null;
}
}
@Override
public void onCancelled() {
if(mpMain != null){
mpMain.setVolume(0,0);
mpMain.release();
mpMain = null;
}
if(mtask_fadeout_music!=null){
mtask_fadeout_music = null;
}
}
}
AudioManager mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
int current_volume =mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
//If you want to player is mute ,then set_volume variable is zero.Otherwise you may supply some value.
int set_volume=0;
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,set_volume, 0);
Prova questo ...
AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
manager.setStreamMute(AudioManager.STREAM_MUSIC, true);
Sarà disattivare il volume multimediale completo per disattivare
Prova questo
AudioManager am = getSystemService(Context.AUDIO_SERVICE);
// Request audio focus.
am.requestAudioFocus(listener, AudioManager.STREAM_MUSIC,AudioManager.AUDIOFOCUS_GAIN);
http://developer.android.com/training/managing-audio/audio-focus.html
AudioManger.setStreamMute
obsoleto. utilizzare sotto il codice alternativo.
le due cifre indicano il canale L e R, quindi l'audio deve essere mp.setvolume (1,1); –
@DheeB grazie, ho aggiornato la mia risposta –
So che è molto tempo dopo, ma sto ricevendo un'eccezione di puntatore nullo quando provo a impostare il volume. Apprezzerei molto il tuo aiuto. –