开源软件名称:CallAutoRecord
开源软件地址:https://gitee.com/madaigou/CallAutoRecord
开源软件介绍:
CallAutoRecord项目介绍通话自动录音 使用说明- 通过接收广播和PhoneStateListener实现
- 支持主叫和被叫录音
- 增加录音震动提示
- 自动删除时长为0的录音文件
- 可过滤,不保存15s-60s录音(根据需要自行修改成自定义时长)
- 简单处理封装6.0运行权限
- 播放录音音频调用系统音乐播放器,兼容7.0,使用FileProvider
效果图- 录音列表
- 自定义功能(上传/删除录音)
- 简单设置页
缕一遍流程,打印log日志一开始为了缕清逻辑,写了多个标记位,洁癖患者可以改造一下,对不起,对不起!
- 主叫
- 被叫
主要代码重写PhoneStateListener()class CallListener : PhoneStateListener() { override fun onCallStateChanged(state: Int, incomingNumber: String) { super.onCallStateChanged(state, incomingNumber) when (state) { TelephonyManager.CALL_STATE_IDLE -> { if (PhoneReceiver.isHujiao && !PhoneReceiver.isGuaduan) { Log.e(PhoneReceiver.TAG, "等待拨号,然后通话") PhoneReceiver.isHujiao = false PhoneReceiver.isZhujiaoTonghua = true } else if (PhoneReceiver.isZhujiaoTonghua && !PhoneReceiver.isGuaduan) { Log.e(PhoneReceiver.TAG, "呼叫:挂断电话") stopRecord() PhoneReceiver.isZhujiaoTonghua = false PhoneReceiver.isGuaduan = true number = "" } else if (PhoneReceiver.isLaiDian && !PhoneReceiver.isGuaduan && isLaidianZhaiji) { Log.e(PhoneReceiver.TAG, "接听电话,然后通话") PhoneReceiver.isLaidianTonghua = true PhoneReceiver.isLaiDian = false isLaidianZhaiji = false } else if (PhoneReceiver.isLaidianTonghua && !PhoneReceiver.isGuaduan) { Log.e(PhoneReceiver.TAG, "被叫:挂断电话") stopRecord() PhoneReceiver.isLaidianTonghua = false PhoneReceiver.isGuaduan = true number = "" } } TelephonyManager.CALL_STATE_OFFHOOK -> { if (PhoneReceiver.isZhujiaoZhaiji) { Log.e(PhoneReceiver.TAG, "主叫:摘机状态") isZhujiaoZhaiji = false if (ACache.get(context).getAsObject(SetActivity.RULE) == null || (ACache.get(context).getAsObject(SetActivity.RULE) as Int == 0) || (ACache.get(context).getAsObject(SetActivity.RULE) as Int == 1) ) { prepareRecord() } } if (PhoneReceiver.isLaiDian && !isLaidianZhaiji) { Log.e(PhoneReceiver.TAG, "被叫:摘机状态") isLaidianZhaiji = true if (ACache.get(context).getAsObject(SetActivity.RULE) == null || (ACache.get(context).getAsObject(SetActivity.RULE) as Int == 0) || (ACache.get(context).getAsObject(SetActivity.RULE) as Int == 2) ) { prepareRecord() } } } TelephonyManager.CALL_STATE_RINGING -> { // 来电状态,电话铃声响起的那段时间或正在通话又来新电,新来电话不得不等待的那段时间。 if (!PhoneReceiver.isLaiDian) { number = incomingNumber Log.e(PhoneReceiver.TAG, "响铃:来电号码$incomingNumber") PhoneReceiver.isLaiDian = true PhoneReceiver.isGuaduan = false isLaidianZhaiji = false } } } }} 启动服务class CallRecorderService : Service() { override fun onCreate() { super.onCreate() val telephonyManager = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager telephonyManager.listen(callListener, PhoneStateListener.LISTEN_CALL_STATE) vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator Log.e(TAG, "启动CallRecordService服务,监听来去电") } override fun onBind(intent: Intent): IBinder? { return null } override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { return super.onStartCommand(intent, flags, startId) } override fun onDestroy() { super.onDestroy() Log.e(TAG, "电话录音服务关闭") }} |
请发表评论