Android 来去电自动录音(一)

        本文是关于android来去电自动录音的一个实现方法介绍。来去电自动录音的关键在于如何×××电话状态的转变:
        i、来电的状态的转换以下(红色标记是咱们要用到的状态)
        空闲(IDEL)——> 响铃(RINGING)——> 接听(ACTIVE)——> 挂断(经历DISCONNECTING——DISCONNECTED)——> 空闲(IDEL) 
        或者  空闲(IDEL)——> 响铃(RINGING)——> 拒接 ——> 空闲(IDEL)
        ii、去电状态的转换以下
        空闲(IDEL)——> 拨号 (DIALING)——> (对方)响铃(ALERTING) ——> 创建链接(ACTIVE)—— 挂断(经历DISCONNECTING——DISCONNECTED)——> 空闲(IDEL) 
        或者 空闲(IDEL)——> 拨号 (DIALING)——> (对方)响铃(ALERTING)——> 挂断/对方拒接 ——> 空闲(IDEL)
下面就分别就 来电 和 去电 这两种状态分析并实现。android

        一、先进行来电的分析和实现,相对去电来讲,来电状态的转换检测要简单些。android api 中的PhoneStateListener 类提供了相应的方法 但咱们须要覆盖 其中的 onCallStateChanged(int state, String incomingNumber) 方法便可实现来电状态的检测,并在此基础上添加录音功能便可。其中 state 参数就是各类电话状态,到时咱们将它跟下面咱们要用到的状态进行比较,如果电话处在咱们想要的状态上,则进行一系列操做,不然就无论他。想要获取这些状态,还须要另外一个电话相关类,那就是 TelephonyManager, 该类 提供了一些电话状态,其中咱们要用到的是:TelephonyManager.CALL_STATE_IDLE(空闲)、TelephonyManager.CALL_STATE_OFFHOOK(摘机)和 TelephonyManager.CALL_STATE_RINGING(来电响铃)这三个状态。判别这三种状态,能够继承 android.telephony.PhoneStateListener 类,实现上面提到的 onCallStateChanged(int state, String incomingNumber) 方法,请看以下代码api

  
  
  
  
  1. public class TelListener extends PhoneStateListener {  
  2.   
  3.     @Override  
  4.     public void onCallStateChanged(int state, String incomingNumber) {  
  5.         super.onCallStateChanged(state, incomingNumber);  
  6.   
  7.         switch (state) {  
  8.         case TelephonyManager.CALL_STATE_IDLE: // 空闲状态,即无来电也无去电  
  9.             Log.i("TelephoneState""IDLE");  
  10.             //此处添加一系列功能代码 
  11.             break;  
  12.         case TelephonyManager.CALL_STATE_RINGING: // 来电响铃  
  13.             Log.i("TelephoneState""RINGING");  
  14.             //此处添加一系列功能代码 
  15.             break;  
  16.         case TelephonyManager.CALL_STATE_OFFHOOK: // 摘机,即接通 
  17.             Log.i("TelephoneState""OFFHOOK");  
  18.             //此处添加一系列功能代码 
  19.             break;  
  20.         }  
  21.   
  22.         Log.i("TelephoneState", String.valueOf(incomingNumber));  
  23.     }  
  24.   
  25. }  

有了以上 来电状态监听代码还不足以实现监听功能,还须要在咱们的一个Activity或者Service中实现监听,方法很简单,代码以下ide

  
  
  
  
  1. /** 
  2. * 在activity 或者 service中加入以下代码,以实现来电状态监听 
  3. */ 
  4. TelephonyManager telMgr = (TelephonyManager)context.getSystemService( 
  5.                 Context.TELEPHONY_SERVICE); 
  6.         telMgr.listen(new TelListener(), PhoneStateListener.LISTEN_CALL_STATE); 

这样就实现了来电状态监听功能,但要可以在设备中跑起来,这还不够,它还须要两个获取手机电话状态的权限spa

  
  
  
  
  1. <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
  2. <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /> 

这样的话就能够跑起来了。xml

        说到这,我想若是你能够实现录音功能的话,在此基础上实现来电自动录音就应该没什么问题了,不过请容我简单罗嗦几句。既然是来电,那么要想录音的话,那么应该就是在监听到 TelephonyManager.CALL_STATE_OFFHOOK 的状态时开启录音机开始录音, 在 监听到TelephonyManager.CALL_STATE_IDLE 的状态时 关闭录音机中止录音。这样,来电录音功能就完成了,不要忘记录音功能一样须要权限blog

  
  
  
  
  1. <uses-permission android:name="android.permission.RECORD_AUDIO"/>  
  2.   
  3. <!-- 要存储文件或者建立文件夹的话还须要如下两个权限 -->  
  4. <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
  5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  

 

未完,继续阅读继承

另附 工程源代码 get

相关文章
相关标签/搜索