对应拨打电话只需要调用ACTION_CALL加对应电话号码即可如下:

 void callPhone(){              Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:110")); //不能调用呼叫              intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);               startActivity(intent);          }  

但是当你拨打110,119,120等紧急电话时,你会发现无法自动呼出,还需要用户进行确认操作,那么能不能实现直接进行呼叫?

答案是可以的,但是前提app必须用系统级别权限,及system/app/目录下方可。

首先确保应用具有如下权限:

   <uses-permission android:name="android.permission.READ_PHONE_STATE" />     <uses-permission android:name="android.permission.CALL_PHONE" />     <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>     <uses-permission android:name="android.permission.CALL_PRIVILEGED" />  

同样调用intent来开启功能,不过内容有些变化

void callPhone(String num){          Intent intent = new Intent("android.intent.action.CALL_PRIVILEGED",Uri.parse("tel:"+num));          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);           startActivity(intent);      }  

然后在源码下编译,放到/system/app/即可使用。


开启拨通电话后设置开启扬声器功能:

首先,获取音频管理器:

audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

设置电话监听:

private class TelListner extends PhoneStateListener{boolean comingPhone=false;@Overridepublic void onCallStateChanged(int state, String incomingNumber) {   switch (state) {               case TelephonyManager.CALL_STATE_IDLE:/* 无任何状态 */               Log.d(tag, "phone idle");                  if(this.comingPhone){                  this.comingPhone=false;                  backMyApp();                  setSpeekModle(false);                  }                   break;               case TelephonyManager.CALL_STATE_OFFHOOK:/* 接起电话 */                Log.d(tag, "phone answer");                this.comingPhone=true;                setSpeekModle(true);                   break;               case TelephonyManager.CALL_STATE_RINGING:/* 电话进来 */               Log.d(tag, "phone coming");                   this.comingPhone=true;                   setSpeekModle(true);                   break;               } }}

注册监听类:

TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);      TelListner listener = new TelListner() ;      telManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);

开启或关闭免提功能:

void setSpeekModle(boolean open){//audioManager.setMode(AudioManager.ROUTE_SPEAKER);        currVolume = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);        audioManager.setMode(AudioManager.MODE_IN_CALL);         if(!audioManager.isSpeakerphoneOn()&&true==open) {          audioManager.setSpeakerphoneOn(true);          audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,                 audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL),                 AudioManager.STREAM_VOICE_CALL);        }else if(audioManager.isSpeakerphoneOn()&&false==open){                 audioManager.setSpeakerphoneOn(false);                 audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,currVolume,                            AudioManager.STREAM_VOICE_CALL);        }}

添加权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />




更多相关文章

  1. Android调用.NET Webservice报org.ksoap2.serialization.SoapPri
  2. android 自定义view
  3. Android(安卓)N 指纹框架
  4. android调用setRequestedOrientation之后
  5. android 包管理系统分析
  6. 【Android】使用LiveData KTX Builder让代码更简洁
  7. bridge和原生交互的简单用法
  8. Android(安卓)SDK 1.0 电话号码的例子(Demo)
  9. Hybrid(在Android中的实现)

随机推荐

  1. Setting Text to Image On Android and A
  2. Android设置activity横屏
  3. Android Handler内存泄露
  4. Android中EditText属性
  5. android禁止锁屏保持常亮
  6. Android Gradle使用详解
  7. Android CTS(兼容性测试)
  8. Android浏览器显示大分辨率图片的问题
  9. android中控制EditText不可编辑的问题
  10. android里面的USB功能-----Accessory模式