权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
public class MainActivity extends AppCompatActivity { AudioManager audioManager; int currVolume;//当前音量 @Override protected void onCreateBundle savedInstanceState) { super.onCreatesavedInstanceState); setContentViewR.layout.activity_main); TelephonyManager telManager = TelephonyManager) getSystemServiceContext.TELEPHONY_SERVICE); TelListner listener = new TelListner); telManager.listenlistener, PhoneStateListener.LISTEN_CALL_STATE); audioManager = AudioManager) getSystemServiceContext.AUDIO_SERVICE); } public void clickView v) { if Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if MainActivity.this.checkSelfPermissionManifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) { callPhone); } else { // Toast.makeTextthis, "没有权限", Toast.LENGTH_LONG).show); } } else { callPhone); } } void callPhone) { Intent callIntent = new IntentIntent.ACTION_CALL); callIntent.setDataUri.parse"tel:10086")); callIntent.setFlagsIntent.FLAG_ACTIVITY_NEW_TASK); startActivitycallIntent); } private class TelListner extends PhoneStateListener { boolean comingPhone = false;//标识 @Override public void onCallStateChangedint state, String incomingNumber) { switch state) { case TelephonyManager.CALL_STATE_IDLE:/* 无任何状态 */ if this.comingPhone) { this.comingPhone = false; setSpeekModlefalse); } break; case TelephonyManager.CALL_STATE_OFFHOOK:/* 接起电话 */ this.comingPhone = true; setSpeekModletrue); break; case TelephonyManager.CALL_STATE_RINGING:/* 电话进来 */ this.comingPhone = true; setSpeekModletrue); break; } } } void setSpeekModleboolean open) { audioManager.setModeAudioManager.ROUTE_SPEAKER); currVolume = audioManager.getStreamVolumeAudioManager.STREAM_VOICE_CALL); //5.0以上 if Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { audioManager.setModeAudioManager.MODE_IN_COMMUNICATION); } else { audioManager.setModeAudioManager.MODE_IN_CALL); } if !audioManager.isSpeakerphoneOn) && open) { Toast.makeTextMainActivity.this, "免提模式", Toast.LENGTH_LONG).show); audioManager.setSpeakerphoneOntrue);//开启免提 audioManager.setStreamVolumeAudioManager.STREAM_VOICE_CALL, audioManager.getStreamMaxVolumeAudioManager.STREAM_VOICE_CALL), AudioManager.STREAM_VOICE_CALL); } else if audioManager.isSpeakerphoneOn) && open) { audioManager.setSpeakerphoneOnfalse); audioManager.setStreamVolumeAudioManager.STREAM_VOICE_CALL, currVolume, AudioManager.STREAM_VOICE_CALL); } } }
ps:此方式在华为手机上不兼容