后台播放音乐时,设置手机铃声,后台音乐不会暂停
2016-12-07 11:27
1136 查看
手机后台播放音乐时,设置手机铃声,后台音乐不会暂停,此现象的为设置手机铃声界面,并没要加入播放的foucs机制,
此修改在packages\providers\MediaProvider\src\com\android\providers\media\RingtonePickerActivity.java中
import android.media.AudioManager;
import android.content.Context;
import android.media.AudioManager.OnAudioFocusChangeListener;
private AudioManager mAudioManager = null;
private boolean mGetFocus = false;
private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
MtkLog.d(TAG, "onAudioFocusChange:" + focusChange );
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
stopAnyPlayingRingtone();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
........
mAudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
........
}
public void run() {
stopAnyPlayingRingtone();
if (mSampleRingtonePos == mSilentPos) {
return;
}
/*
* Stop the default ringtone, if it's playing (other ringtones will be
* stopped by the RingtoneManager when we get another Ringtone from it.
*/
if (mDefaultRingtone != null && mDefaultRingtone.isPlaying()) {
mDefaultRingtone.stop();
mDefaultRingtone = null;
}
Ringtone ringtone;
if (mSampleRingtonePos == mDefaultRingtonePos) {
/// M: if default URI is "", it means silent if default item selected. @{
/* if (mUriForDefaultItem.toString().isEmpty()) {
return;
}
///@}
if (mDefaultRingtone == null) {
mDefaultRingtone = RingtoneManager.getRingtone(this, mUriForDefaultItem);
}*/
/*
* Stream type of mDefaultRingtone is not set explicitly here.
* It should be set in accordance with mRingtoneManager of this Activity.
*/
if (mDefaultRingtone != null) {
mDefaultRingtone.setStreamType(mRingtoneManager.inferStreamType());
}
ringtone = mDefaultRingtone;
mCurrentRingtone = null;
} else {
ringtone = mRingtoneManager.getRingtone(getRingtoneManagerPosition(mSampleRingtonePos));
mCurrentRingtone = ringtone;
}
if (ringtone != null) {
int result=mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_RING, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
MtkLog.d(TAG, " request audio focus fail");
mGetFocus = false;
} else {
MtkLog.d(TAG, " request audio focus success");
mGetFocus = true;
}
if(mAudioManager.getMode() == AudioManager.MODE_RINGTONE){
return;
}
if (mAttributesFlags != 0) {
ringtone.setAudioAttributes(
new AudioAttributes.Builder(ringtone.getAudioAttributes())
.setFlags(mAttributesFlags)
.build());
}
ringtone.play();
}
}
@Override
protected void onPause() {
super.onPause();
if (mGetFocus && (null != mAudioManager) ) {
if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAudioManager.abandonAudioFocus(mAudioFocusListener)) {
MtkLog.d(TAG, "<abandonAudioFocus()> abandon audio focus success");
mGetFocus = false;
} else {
MtkLog.d(TAG, "<abandonAudioFocus()> abandon audio focus failed");
mGetFocus = true;
}
}
if (!isChangingConfigurations()) {
stopAnyPlayingRingtone();
}
mNeedRefreshOnResume = true;
}
加入以上红色的代码即可解决此问题
此修改在packages\providers\MediaProvider\src\com\android\providers\media\RingtonePickerActivity.java中
import android.media.AudioManager;
import android.content.Context;
import android.media.AudioManager.OnAudioFocusChangeListener;
private AudioManager mAudioManager = null;
private boolean mGetFocus = false;
private OnAudioFocusChangeListener mAudioFocusListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
MtkLog.d(TAG, "onAudioFocusChange:" + focusChange );
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
stopAnyPlayingRingtone();
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
........
mAudioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
........
}
public void run() {
stopAnyPlayingRingtone();
if (mSampleRingtonePos == mSilentPos) {
return;
}
/*
* Stop the default ringtone, if it's playing (other ringtones will be
* stopped by the RingtoneManager when we get another Ringtone from it.
*/
if (mDefaultRingtone != null && mDefaultRingtone.isPlaying()) {
mDefaultRingtone.stop();
mDefaultRingtone = null;
}
Ringtone ringtone;
if (mSampleRingtonePos == mDefaultRingtonePos) {
/// M: if default URI is "", it means silent if default item selected. @{
/* if (mUriForDefaultItem.toString().isEmpty()) {
return;
}
///@}
if (mDefaultRingtone == null) {
mDefaultRingtone = RingtoneManager.getRingtone(this, mUriForDefaultItem);
}*/
/*
* Stream type of mDefaultRingtone is not set explicitly here.
* It should be set in accordance with mRingtoneManager of this Activity.
*/
if (mDefaultRingtone != null) {
mDefaultRingtone.setStreamType(mRingtoneManager.inferStreamType());
}
ringtone = mDefaultRingtone;
mCurrentRingtone = null;
} else {
ringtone = mRingtoneManager.getRingtone(getRingtoneManagerPosition(mSampleRingtonePos));
mCurrentRingtone = ringtone;
}
if (ringtone != null) {
int result=mAudioManager.requestAudioFocus(mAudioFocusListener, AudioManager.STREAM_RING, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
MtkLog.d(TAG, " request audio focus fail");
mGetFocus = false;
} else {
MtkLog.d(TAG, " request audio focus success");
mGetFocus = true;
}
if(mAudioManager.getMode() == AudioManager.MODE_RINGTONE){
return;
}
if (mAttributesFlags != 0) {
ringtone.setAudioAttributes(
new AudioAttributes.Builder(ringtone.getAudioAttributes())
.setFlags(mAttributesFlags)
.build());
}
ringtone.play();
}
}
@Override
protected void onPause() {
super.onPause();
if (mGetFocus && (null != mAudioManager) ) {
if (AudioManager.AUDIOFOCUS_REQUEST_GRANTED == mAudioManager.abandonAudioFocus(mAudioFocusListener)) {
MtkLog.d(TAG, "<abandonAudioFocus()> abandon audio focus success");
mGetFocus = false;
} else {
MtkLog.d(TAG, "<abandonAudioFocus()> abandon audio focus failed");
mGetFocus = true;
}
}
if (!isChangingConfigurations()) {
stopAnyPlayingRingtone();
}
mNeedRefreshOnResume = true;
}
加入以上红色的代码即可解决此问题
相关文章推荐
- 解决 后台播放音乐时,设置手机铃声,后台音乐不会暂停
- iOS 实现后台 播放音乐声音 AVAudioPlayer 以及铃声设置(循环播放震动)
- Android 后台播放FM 手机切换到airplane mode FM不会停止 MTK
- iOS 9 后台音乐播放设置三部曲
- 10.14_魅族手机音乐播放无故暂停,MetroUICss-tile中的字如何居中
- iOS 设置铃声---加载音乐和音频然后进行播放
- 设计一个音乐播放器,用List列表显示手机中所有音乐,支持播放、暂停、继续、上一首、下一首等功能。
- 后台播放音乐时播放视频,音乐暂停播放的处理方法
- IOS 设置后台播放音乐
- Service后台服务控制音乐的播放暂停和停止,播放完自动播放下一曲
- 手机影音第十五天,利用service实现后台播放音乐,在通知栏显示当前音乐信息等
- 获取本地手机音乐播放暂停、播放、下一曲、上一曲
- 学习Windows Phone 7手机开发:后台任务之播放音乐
- Android 后台播放FM 手机切换到airplane mode FM不会停止 M
- android 手机后台播音乐,设置闹钟,打一通电话,挂断电话后,闹钟与音乐同时响起
- AVPlayer 音乐播放后台播放,以及锁屏主题设置
- 本文主要介绍如何将音乐文件打包到程序中并设置为铃声
- 【PPT技巧】让PPT背景音乐仅在播放视频时暂停
- ios后台播放音乐
- MOTO Droid手机自定义本地铃声设置方法