在Android平台实现实现通话录音功能

1.作为后台运行的程序需要使用service去实现,在录音的时候雨IO操作需要启动新线程

2.使用平台的MediaRecorder类录音

3.用PhoneStateListener监听电话的状态

4.添加相应的权限

    <uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

具体代码如下:

package com.mobi.app;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;import java.io.File;
import java.io.IOException;public class CallRecorderService extends Service {private static final String TAG = "CallRecorderService";private ServiceHandler mServiceHandler;private Looper mServiceLooper;private TelephonyManager mTelmgr;public Handler mToastHandler = new Handler();public static final String ACTION_LISTEN_CALL_STATE ="com.mobi.bootttest.ACTION_LISTEN_CALL_STATE";public void onCreate() {HandlerThread thread = new HandlerThread(TAG, Process.THREAD_PRIORITY_BACKGROUND);thread.start();mServiceLooper = thread.getLooper();mServiceHandler = new ServiceHandler(mServiceLooper);}public int onStartCommand(Intent intent, int flags, int startId) {Message msg = mServiceHandler.obtainMessage();msg.arg1 = startId;msg.obj = intent;mServiceHandler.sendMessage(msg);return Service.START_STICKY;}public IBinder onBind(Intent intent) {return null;}public void onDestory() {mServiceLooper.quit();}private final class ServiceHandler extends Handler {public ServiceHandler(Looper looper) {super(looper);}public void handleMessage(Message msg) {Intent intent = (Intent) msg.obj;if (intent != null) {if(ACTION_LISTEN_CALL_STATE.equals(intent.getAction())) {PhoneListener mPhoneListener = new PhoneListener(getApplicationContext());if(null == mPhoneListener){mPhoneListener = new PhoneListener(getApplicationContext());}mTelmgr =(TelephonyManager)getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);mTelmgr.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);}}}}private class PhoneListener extends PhoneStateListener {private Context mContext;private String number;private MediaRecorder mRecoder;public  PhoneListener(Context context){mContext = context;}public void onCallStateChanged(int state,String incomingNumber){Log.d(TAG,"The state of call is "+String.valueOf(state));switch (state){case TelephonyManager.CALL_STATE_IDLE:Log.d(TAG,"The state is idle");if(null == mRecoder){return;}mRecoder.stop();mRecoder.release();Log.d(TAG,"The state is done");break;case TelephonyManager.CALL_STATE_OFFHOOK:Log.d(TAG,"The state is offhook");mRecoder = new MediaRecorder();mRecoder.setAudioSource(MediaRecorder.AudioSource.MIC);mRecoder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);mRecoder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);File file = new File(Environment.getExternalStorageDirectory().getPath(),"XXXX");if(!file.exists()){file.mkdirs();}mRecoder.setOutputFile(file.getAbsolutePath()+File.separator+number+".amr");try{mRecoder.prepare();mRecoder.start();Log.d(TAG,"start recording");}catch (IOException e){Log.d(TAG,"Recording fails");mRecoder.reset();mRecoder.release();mRecoder = null;}break;case TelephonyManager.CALL_STATE_RINGING:if(incomingNumber!=null){number = incomingNumber;}else{number = "unknown";}Log.d(TAG,"The state is ringing "+incomingNumber);break;default:break;}}}
}

Android 通话录音功能实现相关推荐

  1. android p通话录音功能,Android编程实现通话录音功能的方法

    本文实例讲述了Android编程实现通话录音功能的方法.分享给大家供大家参考,具体如下: 因受系统限制,只能录自已麦的声音,录不到对方的声音,可能需要改内核才能实现双向录音: 接通电话和挂断电话时,震 ...

  2. android打电话播放录音,安卓原生的拨号器应用通话录音功能已经到来但暂时还不能正常使用...

    然而安卓原生的拨号器并不支持通话录音功能,而小米米柚拨号器的通话录音功能则是许多用户刚需的重要功能. 好消息是在小米宣布替换拨号器的同时也透露谷歌原生拨号器也在更新,后续将为用户提供原生的通话录音功能 ...

  3. 曝iPhone15或换用USB-C接口;Google将下架第三方Android通话录音APP|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  4. 通话录音_iOS 14将支持通话录音功能,但有隐性使用条件

    6月9日消息,近日苹果已经正式宣布将于本月20日举行线上WWDC 2020大会,届时iOS 14将正式和大家见面.今日有外媒根据泄露的代码发现苹果或将在iOS 14中添加一项大家期待已久的新功能--支 ...

  5. IOS系统通话录音功能的实现方案

    IOS系统通话录音功能的实现方案 前言 由于IOS系统的隐私性,在非越狱情况下没有通话录音功能,网上没有相关方案,所以写一个分享一下. 编写不易,如果可以,还希望来波点赞.关注,有想吐槽的或内容纠错的 ...

  6. Android实现录音功能实现实例(MediaRecorder)

    Android实现录音功能实现实例(MediaRecorder) - 腾讯云开发者社区-腾讯云 本文介绍了Android实现录音的实例代码(MediaRecorder),分享给大家,具体如下: And ...

  7. android实现录音功能demo

    android实现录音功能demo 主要功能实现 视频演示 录音相关代码 下载链接 主要功能实现 主要实现录音功能,录音,停止录音,保存录音,然后可以查看录音列表,还用sqlite数据库实现了用户的注 ...

  8. 无需越狱,Android通话记录、通讯录、短信同步到iphone6

    Q:如何将通讯录从Android同步到IOS?? 新换的手机,是个人都喜欢先瞎折腾一番.那么问题来了,怎样将旧手机的信息搬到新手机?这是件让人很最头疼的事.纠结了一番,我还是狠下心来,并且本着爱好技术 ...

  9. Android之录音功能

    Android之录音功能 1.需要权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE ...

最新文章

  1. 如何理解路由中的IP选路,修改,ICMP重定向差错?—Vecloud微云
  2. Border-radius属性--设置圆角边框
  3. boost::math::geometric相关用法的测试程序
  4. The executable was signed with invalid entitlements
  5. lfcp——PB使用
  6. 我们可以覆盖Java中的main()方法吗?
  7. 阿里淘宝天猫单点登录项目实战(附源码)
  8. 小程序绘制之CanvasContext
  9. (转载)芹菜拌豆腐皮 降压小凉菜
  10. [整理] TPM 2.0 设备串口通讯协议中文文档
  11. MySQL数据库使某个不是主键的字段唯一
  12. 机器学习库线性回归代码_PyCaret回归:更好的机器学习库
  13. linux 进程 D 状态,Linux 进程的 Uninterruptible sleep(D) 状态
  14. 【JAVA程序设计】(C00039)基于ssm的企业工资管理系统
  15. idea打包 jar文件
  16. log4j2关闭debug日志
  17. mysql中一次字符集和排序规则引起的sql查询报错
  18. APM飞控使用动捕等外部定位
  19. Linux | 第一篇——常见指令汇总【超全、超详细讲解】
  20. 2020华数杯全国大学生数学建模竞赛C题-脱贫帮扶绩效评价体系的构建与探究(二)(附MATLAB和Python代码)

热门文章

  1. R语言 求均匀分布的矩估计
  2. 分享-RK3399支持多种屏幕接口如何进行屏幕切换控制
  3. 从输入url到页面展示出来经历了哪些过程
  4. MLS(移动最小二乘)
  5. [#0x002B] IR经典模型之布尔模型
  6. 使用GParted为Ubuntu根目录扩容
  7. RabbitMQ启动异常 Job for rabbitmq-server.service failed because the control process exited
  8. README规范总结
  9. 【蓝桥杯每日一练:一起去看海】
  10. MapReduce工作笔记——Streaming多路输出