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

1、先进行来电的分析和实现,相对去电来说,来电状态的转换检测要简单些。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) 方法,请看如下代码

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

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

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

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

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

这样的话就可以跑起来了。

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

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

未完,继续阅读

另附 工程源代码

更多相关文章

  1. Android中控件的显示和隐藏以及EditText的可编辑和不可编辑状态
  2. Android(安卓)button原理 转载
  3. Android(安卓)应用程序窗体显示状态操作(requestWindowFeature()
  4. Android之Selector详解(背景选择器)
  5. 转:Android中shape的使用
  6. Activity生命周期详解
  7. android 获取屏幕高度,宽度,状态栏高度
  8. android 学习八 android selector的使用
  9. Android(安卓)Activity生命周期具体内容概述

随机推荐

  1. Android日记之四
  2. Android(安卓)Animation学习(五) ApiDemos
  3. Context和SQLiteOpenHelper创建数据库
  4. android 显示16色的图片:输入用颜色矩阵,显
  5. Android(安卓)Animation 高手必读 之一 T
  6. No content provider found for permissi
  7. Android(安卓)操纵File查看文件大小,清理
  8. Android使用Handler实现下载文件功能
  9. Android(安卓)通知流程
  10. Android(安卓)4游戏编程入门经典