import android.telephony.TelephonyManager;\r
import com.enqualcomm.support.CoreService;\r
import com.enqualcomm.support.ICContentProvider;\r
+import com.enqualcomm.support.MainActivity;\r
import com.enqualcomm.support.bean.Alarm;\r
import com.enqualcomm.support.bean.Antioff;\r
import com.enqualcomm.support.bean.NoticeContent;\r
import com.enqualcomm.support.utils.AlarmHelper;\r
import com.enqualcomm.support.utils.Connection;\r
import com.enqualcomm.support.utils.DBHelper;\r
+import com.enqualcomm.support.utils.ICAudioManager;\r
import com.enqualcomm.support.utils.ICLogger;\r
import com.enqualcomm.support.utils.MissedCallContentObserver;\r
import com.enqualcomm.support.utils.SharPreferenceUtil;\r
import com.enqualcomm.support.utils.TimeUtil;\r
+import com.enqualcomm.support.utils.Util;\r
+\r
import java.util.ArrayList;\r
import java.util.Calendar;\r
import java.util.Date;\r
import java.util.Iterator;\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import rx.Observable;\r
+import rx.functions.Action1;\r
\r
import static android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED;\r
import static android.telephony.TelephonyManager.CALL_STATE_OFFHOOK;\r
public void onCallStateChanged(int state, String incomingNumber) {\r
super.onCallStateChanged(state, incomingNumber);\r
\r
- ICLogger.i("onCallStateChanged state "+state+", incomingNumber "+incomingNumber);\r
+ ICLogger.i("========onCallStateChanged state "+state+", incomingNumber "+incomingNumber);\r
switch(state) {\r
case 0: //挂电话\r
isCalling = false;\r
// if (SilentManager.this.haveHandSilence) {\r
// SilentManager.this.handSilence(SilentManager.this.mContext, SilentManager.this.mValue_isSilence);\r
// }\r
+ if(ICAudioManager.needMute==true)\r
+ {\r
+ Observable.timer(2000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+ public void call(Long param1Long) {\r
+ ICAudioManager.restoreVolumn(mContext); //2秒后恢复音量\r
+ ICAudioManager.needMute=false;\r
+ }\r
+ });\r
\r
+ }\r
+ ICLogger.i("========Hung up!");\r
break;\r
case 1: //来电\r
isCalling = true;\r
Intent var3 = new Intent();\r
var3.setAction(ACTION_CLOSE_UNREAD_MSG);\r
mContext.sendBroadcast(var3);\r
+\r
+ ICLogger.i("========Ring!");\r
+ if(ICAudioManager.needMute==true)\r
+ {\r
+ ICAudioManager.setVolumnMute(mContext);\r
+ }\r
break;\r
case 2://接电话\r
isCalling = true;\r
+ ICLogger.i("========OutGoing !");\r
+ if(ICAudioManager.needMute==true)\r
+ {\r
+ ICAudioManager.setVolumnMute(mContext);\r
+ }\r
+\r
}\r
\r
}\r
--- /dev/null
+package com.enqualcomm.support.utils;
+
+import android.content.Context;
+import android.content.Intent;
+import android.media.AudioManager;
+import android.os.Build;
+
+public class ICAudioManager {
+
+ private static int saved_volumn = 0;
+ public static boolean needMute = false;
+ private static int route = 0;
+
+ public static void setVolumnMute(Context context) {
+ AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ ICLogger.i("======setVolumnMute");
+ saved_volumn = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
+
+ route=audioManager.getRouting(AudioManager.MODE_IN_COMMUNICATION);
+ ICLogger.i("======getRouteMODE_IN_COMMUNICATION "+route);
+ route=audioManager.getRouting(AudioManager.MODE_IN_CALL);
+ ICLogger.i("======getRouteMODE_IN_CALL "+route);
+ route=audioManager.getRouting(AudioManager.MODE_CURRENT);
+ ICLogger.i("======getRouteMODE_CURRENT "+route);
+ route=audioManager.getRouting(AudioManager.MODE_NORMAL);
+ ICLogger.i("======getRouteMODE_NORMAL "+route);
+ audioManager.setRouting(AudioManager.MODE_IN_COMMUNICATION,AudioManager.ROUTE_HEADSET,0);
+
+ Intent intent=new Intent();
+ intent.setAction(Intent.ACTION_HEADSET_PLUG);
+ intent.putExtra("microphone", 1);
+
+ context.sendBroadcast(intent);
+// SimSignalUtil.SetRingMode(context, AudioManager.RINGER_MODE_SILENT, false);
+// CloseSpeaker(context);//
+
+ }
+
+ public static void restoreVolumn(Context context) {
+ ICLogger.i("======restoreVolumn");
+ AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ audioManager.setRouting(AudioManager.MODE_IN_COMMUNICATION,AudioManager.ROUTE_SPEAKER,0);
+ Intent intent=new Intent();
+ intent.setAction(Intent.ACTION_HEADSET_PLUG);
+ intent.putExtra("microphone", 0);
+ context.sendBroadcast(intent);
+// changeToSpeaker(context);
+
+// SimSignalUtil.SetRingMode(context, AudioManager.RINGER_MODE_NORMAL, true);
+ // OpenSpeaker(context);
+ }
+
+
+ /**
+ * 切换到外放
+ */
+ public static void changeToSpeaker(Context context) {
+ AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
+ audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
+ } else {
+ audioManager.setMode(AudioManager.MODE_IN_CALL);
+ }
+ audioManager.setSpeakerphoneOn(true);
+ }
+
+ /**
+ * 切换到耳机模式
+ */
+ public static void changeToHeadset(Context context) {
+ AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
+ audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
+ } else {
+ audioManager.setMode(AudioManager.MODE_IN_CALL);
+ }
+ audioManager.setSpeakerphoneOn(false);
+
+ }
+
+ /**
+ * 切换到听筒
+ */
+ public static void changeToReceiver(Context context) {
+ AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ audioManager.setSpeakerphoneOn(false);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
+ audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
+ } else {
+ audioManager.setMode(AudioManager.MODE_IN_CALL);
+ }
+ }
+
+ //关闭扬声器
+ public static void CloseSpeaker(Context context) {
+ try {
+ AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ if (audioManager != null) {
+ if (audioManager.isSpeakerphoneOn()) {
+ audioManager.setSpeakerphoneOn(false);
+ audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, saved_volumn,
+ AudioManager.STREAM_VOICE_CALL);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ //Toast.makeText(context,"扬声器已经关闭",Toast.LENGTH_SHORT).show();
+ }
+//打开扬声器
+ public static void OpenSpeaker(Context context) {
+
+ try{
+ AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+ //audioManager.setMode(AudioManager.ROUTE_SPEAKER);
+ audioManager.setMode(AudioManager.MODE_IN_CALL);
+ saved_volumn = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
+
+ if(!audioManager.isSpeakerphoneOn()) {
+ audioManager.setSpeakerphoneOn(true);
+
+ audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
+ audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL ),
+ AudioManager.STREAM_VOICE_CALL);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+}