Android录制或播放语音消息时关闭其他媒体播放
2017-09-29 13:50
295 查看
1.发送系统广播:
Intent i = new Intent(“com.android.music.musicservicecommand”);
i.putExtra(“command”, “pause”);
context.sendBroadcast(i);
因为其他的播放器不一定注册监听了那个广播,所以大多数情况是不起作用的。
2.通过触发媒体的按钮来操作播放器状态:
KeyEvent.KEYCODE_MEDIA_PAUSE
public static void sendMediaButton(Context context, int keyCode) {
AudioManager audioManager= (AudioManager) context.getSystemService (Context.AUDIO_SERVICE);
//先判断后台是否再播放音乐
if (audioManager.isMusicActive()){
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
context.sendOrderedBroadcast(intent,null);
}
3. 通过AudioManager获取音频焦点AudioFocus,来竞争使用audio做停止播放或者降低声音的处理
AudioManager am = (AudioManager) mAppContext.getSystemService (Context.AUDIO_SERVICE);
am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager .AUDIOFOCUS_GAIN_TRANSIENT);
AudioManager.AUDIOFOCUS_GAIN: 永久获取媒体焦点(播放音乐) 估计音乐播放器使用了此方法,在播放视频时调用,不起作用
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT 暂时获取焦点 适用于短暂的音频
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK Duck 我们应用跟其他应用共用焦点 我们播放的时候其他音频会降低音量
4.写一个服务,当第三方播放器打开时 ,开启这个服务,音乐暂停;关闭服务,音乐继续
服务类:
private AudioManager mAm;
private static boolean vIsActive=false;
private MyOnAudioFocusChangeListener mListener;
public class MyOnAudioFocusChangeListener implements OnAudioFocusChangeListener {
@Override
public void onAudioFocusChange(int focusChange) {
// TODO Auto-generated method stub
}
}
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.d(TAG, “onStartCommand”);
Toast.makeText(getApplicationContext(), “服务已启动”, 0).show();
调用:开始或结束服务
startService(new Intent(MainActivity.this,StartService.class));
stopService(new Intent(MainActivity.this,StartService.class));
Intent i = new Intent(“com.android.music.musicservicecommand”);
i.putExtra(“command”, “pause”);
context.sendBroadcast(i);
因为其他的播放器不一定注册监听了那个广播,所以大多数情况是不起作用的。
2.通过触发媒体的按钮来操作播放器状态:
KeyEvent.KEYCODE_MEDIA_PAUSE
public static void sendMediaButton(Context context, int keyCode) {
AudioManager audioManager= (AudioManager) context.getSystemService (Context.AUDIO_SERVICE);
//先判断后台是否再播放音乐
if (audioManager.isMusicActive()){
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
context.sendOrderedBroadcast(intent,null);
keyEvent = new KeyEvent(KeyEvent.ACTION_UP, keyCode); intent = new Intent(Intent.ACTION_MEDIA_BUTTON); intent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent); context.sendOrderedBroadcast(intent,null); }
}
3. 通过AudioManager获取音频焦点AudioFocus,来竞争使用audio做停止播放或者降低声音的处理
AudioManager am = (AudioManager) mAppContext.getSystemService (Context.AUDIO_SERVICE);
am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager .AUDIOFOCUS_GAIN_TRANSIENT);
AudioManager.AUDIOFOCUS_GAIN: 永久获取媒体焦点(播放音乐) 估计音乐播放器使用了此方法,在播放视频时调用,不起作用
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT 暂时获取焦点 适用于短暂的音频
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK Duck 我们应用跟其他应用共用焦点 我们播放的时候其他音频会降低音量
后台播放音乐时,项目中播放视频,1方法不起作用,2方法有效 3 暂时获取焦点时,播放视频,音乐停止,退出播放界面,音乐自动播放
4.写一个服务,当第三方播放器打开时 ,开启这个服务,音乐暂停;关闭服务,音乐继续
服务类:
private AudioManager mAm;
private static boolean vIsActive=false;
private MyOnAudioFocusChangeListener mListener;
public class MyOnAudioFocusChangeListener implements OnAudioFocusChangeListener {
@Override
public void onAudioFocusChange(int focusChange) {
// TODO Auto-generated method stub
}
}
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.d(TAG, “onStartCommand”);
Toast.makeText(getApplicationContext(), “服务已启动”, 0).show();
mAm = (AudioManager) getApplicationContext().getSystemService( Context.AUDIO_SERVICE); vIsActive=mAm.isMusicActive(); mListener = new MyOnAudioFocusChangeListener(); if(vIsActive) { int result = mAm.requestAudioFocus(mListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT); if (result == AudioMa 4000 nager.AUDIOFOCUS_REQUEST_GRANTED) { Log.d(TAG, "requestAudioFocus successfully."); } else { Log.d(TAG, "requestAudioFocus failed."); } } return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); if(vIsActive) { mAm.abandonAudioFocus(mListener); } Log.d(TAG, "onDestroy"); }
调用:开始或结束服务
startService(new Intent(MainActivity.this,StartService.class));
stopService(new Intent(MainActivity.this,StartService.class));
相关文章推荐
- Android仿微信语音消息的录制和播放功能
- Android仿微信语音录制和播放
- Android语音录制和播放
- 【Android】媒体——利用MediaPlayer实现对讲语音播放
- [小白装逼]Android 语音录制及播放的处理---AudioH
- Android 录音功能(语音录制保存,播放)
- Android调用手机系统自带录音功能实现语音录制与播放
- Android 语音录制与播放的实现(文件模式+字节流模式)
- 仿微信语音消息的录制和播放
- android语音录制与播放
- Android播放聊天语音消息帧动画问题
- Android语音录制和播放
- win7/8/xp系统关闭自动播放功能禁止音频媒体自动播放
- Android实现录音功能及播放语音功能
- Android音频的播放与录制
- Android 多媒体——音频播放录制、视频播放、相机
- Android实现语音数据实时采集、播放
- FMS第二课:播放录制的媒体文件
- Android声音录制和播放
- Android下强制关闭其他程序