修改:
frameworks\base\media\java\android\media\MediaFocusControl.java:
1、import packages:
import com.android.internal.telephony.ITelephony;
import android.os.ServiceManager;
2、增加获取当前Phone Call State的方法getPhoneCallState():
private int getPhoneCallState(){
int phoneCallState = TelephonyManager.CALL_STATE_IDLE;
TelephonyManager telephonyManager = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
ITelephony telephonyService = ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
if (telephonyService != null) {
Log.w(TAG, "getPhoneCallState: mTelephonyService != null");
try {
phoneCallState = telephonyService.getPreciseCallState();
Log.w(TAG, "getPhoneCallState: telephonyService.getPreciseCallState() = " + phoneCallState);
} catch (RemoteException ex) {
if(telephonyManager != null){
phoneCallState = telephonyManager.getCallState();
Log.w(TAG, "getPhoneCallState: telephonyManager.getCallState() = " + phoneCallState);
}
Log.w(TAG, "Catch exception when getPreciseCallState: ex = "
+ ex.getMessage());
}
} else {
Log.w(TAG, "getPhoneCallState: telephonyService == null");
if(telephonyManager != null){
phoneCallState = telephonyManager.getCallState();
Log.w(TAG, "getPhoneCallState: telephonyManager.getCallState() = " + phoneCallState);
}
}
Log.w(TAG, "getPhoneCallState: phoneCallState = " + phoneCallState);
return phoneCallState;
}
3、修改
private boolean canReassignAudioFocus() {
// focus requests are rejected during a phone call or when the phone is ringing
// this is equivalent to IN_VOICE_COMM_FOCUS_ID having the focus
if (!mFocusStack.isEmpty() && mFocusStack.peek().hasSameClient(IN_VOICE_COMM_FOCUS_ID)) {
return false;
}
return true;
}
为
private boolean canReassignAudioFocus() {
// focus requests are rejected during a phone call or when the phone is ringing
// this is equivalent to IN_VOICE_COMM_FOCUS_ID having the focus
if (!mFocusStack.isEmpty() && mFocusStack.peek().hasSameClient(IN_VOICE_COMM_FOCUS_ID) && (getPhoneCallState() != TelephonyManager.CALL_STATE_IDLE)) {
Log.w(TAG, "canReassignAudioFocus: return false");
return false;
}
Log.w(TAG, "canReassignAudioFocus: return true");
return true;
}