我的应用程序Call_withSpeaker设置闹钟在android 4.2.1 micromax, 4.1.2三星和2.3摩托罗拉工作正常。三星4.2.2唯一的问题…一切都很好,但扬声器不启用通话开始只有在4.2.2三星。我使用PhoneStateListener
,如果呼叫开始一旦我使用
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
我在这里面临的问题是打开和关闭扬声器手机不能正常工作,只有三星4.2.2和三星duas 4.1.2该怎么办?你知道吗??这是否与手机版本或某些设置有关???
这只是因为在某些移动设备(SdkVersion 11及以上)中,它没有经过TelephonyManager.CALL_STATE_OFFHOOK
和TelephonyManager.CALL_STATE_RINGING
并直接调用TelephonyManager.CALL_STATE_IDLE
,因此在某些情况下它无法运行您的逻辑。检查每一个调用状态总比了解问题要好。
你得多锻炼一下你的大脑…:)
检查. .它会帮助你的
if (TelephonyManager.CALL_STATE_RINGING == state) {
Log.i(LOG_TAG, "RINGING start ");
isPhoneCalling = true;
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
}
if (TelephonyManager.CALL_STATE_OFFHOOK == state) {
// active
Log.i(LOG_TAG, "OFFHOOK..callringing");
isPhoneCalling = true;
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true);
}
if (TelephonyManager.CALL_STATE_IDLE == state) {
// run when class initial and phone call ended, need detect flag
// from CALL_STATE_OFFHOOK
Log.i(LOG_TAG, "_callend on start ");
Log.i("start ", "start "+callFromApp + isPhoneCalling );
if (isPhoneCalling) {
Log.i(LOG_TAG, "IDLE_callendafter ring ");
AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_NORMAL);
//Deactivate loudspeaker
audioManager.setSpeakerphoneOn(false);
// Remove listener
PhoneCallListener phoneListener = new PhoneCallListener();
TelephonyManager telephonyManager = (TelephonyManager)mContext.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_NONE);
isPhoneCalling = false;
}
}