android - How to correctly change MediaPlayer audio stream type? -


i have simple mp service play, pause, resume audio. works fine. but, last night have decided add feature user route audio ear-piece or speaker , have been battling mp.setaudiostreamtype().

problem can't change while service connected , mp created. don't want terminate service and/or unbind , rebind require lot of refactoring how supposed change audiostreamtype while playing audio?

here code:

player service:

public class pservice extends service {  private mediaplayer mp = new mediaplayer(); public static final string playing_finished_msg = "1"; @override public void oncreate() {     super.oncreate(); }  @override public void ondestroy() {     mp.stop();     mp.release(); }  private void playsong(string file) {     try {         mp.reset();         mp.setdatasource(file);         mp.setaudiostreamtype(myapp.getaudiostreamtype());         mp.prepare();         mp.start();          mp.setoncompletionlistener(new oncompletionlistener() {             public void oncompletion(mediaplayer arg0) {                 intent = new intent();                 i.setaction(mdservice.playing_finished_msg);                 sendbroadcast(i);             }         }); 

toggle route button onclick

    currentlyplayingfile = file; currentlyplayingphone = phone;  lastdurationbeforepause = mpinterface.getcurrentposition();   if(myapp.getaudiostreamtype() == audiomanager.stream_music)  {     myapp.setaudiostreamtype(audiomanager.stream_voice_call);         recording_player_route_button.setimageresource(r.drawable.route_off);                          }   else{     myapp.setaudiostreamtype(audiomanager.stream_music);                                     recording_player_route_button.setimageresource(r.drawable.route_on);         }                   try {                 mpinterface.playfile(file);          player_seekbar.setprogress(0);         player_seekbar.setmax(mpinterface.getduration());         //seekto last millisecond after switching from/to sepaker         if(seekto>0)         {             mpinterface.seekto(seekto);         }         ispausebuttonpressed = false;         handleseekbarupdate.postdelayed(handleseekbarupdatejob, 1);     } catch (remoteexception e) {         e.printstacktrace();     } 

the modify_audio_settings permission needed in manifest work.

audiomanager am=(audiomanager)getsystemservice(context.audio_service); am.setmode(audiomanager.mode_normal); mediaplayer mp=new mediaplayer(); uri ringtoneuri=ringtonemanager.getdefaulturi(ringtonemanager.type_notification); try {     mp.setdatasource(getapplicationcontext(), ringtoneuri);     mp.setaudiostreamtype(audiomanager.stream_notification);     mp.prepare();     mp.start(); } catch(exception e) {     //exception caught in end zone } 

Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -