首页 > 系统 > Android > 正文

Android通话默认打开扬声器的方法

2019-10-21 21:39:43
字体:
来源:转载
供稿:网友

在打电话时如果想在电话接通时默认采用扬声器进行audio的输出,也就是打开免提。具体的做法是在InCallService文件中,做出下面的修改。

文件:frameworks-base / telecomm/java/android/telecom/InCallService.java

增加oncreate方法,添加phone状态监听的listener。

  @Override  public void onCreate() {     super.onCreate();    MyPhoneStateListener phonehoneStateListener=new MyPhoneStateListener();    TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);    mTelephonyManager.listen(phonehoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);  }

增加销毁事件

  @Override  public void onDestroy() {    super.onDestroy();  }

增加事件的定义。

  private class MyPhoneStateListener extends PhoneStateListener{    @Override    public void onCallStateChanged(int state, String incomingNumber) {      switch (state) {      case TelephonyManager.CALL_STATE_IDLE:        setAudioRoute(CallAudioState.ROUTE_EARPIECE);        break;      case TelephonyManager.CALL_STATE_RINGING:        setAudioRoute(CallAudioState.ROUTE_SPEAKER);        break;      case TelephonyManager.CALL_STATE_OFFHOOK:      setAudioRoute(CallAudioState.ROUTE_SPEAKER);      default:        break;      }      super.onCallStateChanged(state, incomingNumber);    }  }

如果是MTK平台的话,可以开启如下这个宏,也可以达到想要的效果

MTK_TB_APP_CALL_FORCE_SPEAKER_ON = yes

Android手机听筒和扬声器切换

 AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); private void setSpeakerphoneOn(boolean on) {         if(on) {             audioManager.setSpeakerphoneOn(true);         } else {             audioManager.setSpeakerphoneOn(false);//关闭扬声器             audioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_EARPIECE, AudioManager.ROUTE_ALL);             setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);             //把声音设定成Earpiece(听筒)出来,设定为正在通话中             audioManager.setMode(AudioManager.MODE_IN_CALL);         } }

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表