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
Post a Comment