Android 如何正确更改MediaPlayer音频流类型?
我有一个简单的mp服务来播放、暂停、恢复音频。一切正常。 但是,昨晚我决定为用户添加一项功能,将音频路由到耳机或扬声器,并一直在与Android 如何正确更改MediaPlayer音频流类型?,android,media-player,toggle,playback,Android,Media Player,Toggle,Playback,我有一个简单的mp服务来播放、暂停、恢复音频。一切正常。 但是,昨晚我决定为用户添加一项功能,将音频路由到耳机或扬声器,并一直在与mp.setAudioStreamType()进行斗争 问题是,在连接服务并创建mp时,我无法更改它。我不想终止服务和/或取消绑定和重新绑定,因为这需要大量重构 播放音频时如何更改AudioStreamType 这是我的密码: 玩家服务: public class PService extends Service { private MediaPlayer mp =
mp.setAudioStreamType()
进行斗争
问题是,在连接服务并创建mp时,我无法更改它。我不想终止服务和/或取消绑定和重新绑定,因为这需要大量重构
播放音频时如何更改AudioStreamType
这是我的密码:
玩家服务:
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 i = new Intent();
i.setAction(MDService.PLAYING_FINISHED_MSG);
sendBroadcast(i);
}
});
单击“切换路线”按钮
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();
}
清单中需要
修改音频设置权限
,此操作才能正常运行
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 the end zone
}