Android电话录音

本例是一个通用的电话录音方案,先创建一个广播接收,

package zhangphil.phonerecorder;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;public class PhoneBroadcastReceiver extends BroadcastReceiver {// BroadcastReceiver@Overridepublic void onReceive(Context context, Intent intent) {// 外拨电话if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {System.out.println(Intent.ACTION_NEW_OUTGOING_CALL);// 获得外拨号码String EXTRA_PHONE_NUMBER = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);Log.d(this.getClass().getName(), EXTRA_PHONE_NUMBER);// 开始启动后台服务录音Intent service = new Intent(context, PhoneService.class);context.startService(service);}}
}

注册到AndroidManifest.xml里面,然后开机启动(通过设置广播过滤器):

<action android:name="android.intent.action.BOOT_COMPLETED" />

同时增加外拨电话的广播过滤器:

<action android:name="android.intent.action.NEW_OUTGOING_CALL" />

只要有外拨电话就启动后台服务,然后录制通话录音。录音文件存放在SD卡的根目录下。全程将使用PhoneStateListener监听电话通话状态,通话开始然后就开启MediaRecorder录音,通话结束,然后就使MediaRecorder停止录音。

package zhangphil.phonerecorder;import java.io.File;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.IBinder;
import android.os.Vibrator;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;public class PhoneService extends Service {private File file;// 录音的格式private String fileName = "zhangphil.3gp";@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();String path = Environment.getExternalStorageDirectory().getAbsolutePath();file = new File(path, fileName);TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);telephonyManager.listen(new MyPhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);}private class MyPhoneListener extends PhoneStateListener {private MediaRecorder mediaRecorder;// 震动private Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);@Overridepublic void onCallStateChanged(int state, String incomingNumber) {try {switch (state) {case TelephonyManager.CALL_STATE_RINGING: // 来电break;case TelephonyManager.CALL_STATE_OFFHOOK: // 接通电话startRecordPhoneSound();break;// 没有通话(通话结束)case TelephonyManager.CALL_STATE_IDLE:if (mediaRecorder != null) {mediaRecorder.stop();mediaRecorder.release();mediaRecorder = null;// 震动vibrator.vibrate(100);}break;}} catch (Exception e) {e.printStackTrace();}}private void startRecordPhoneSound() {mediaRecorder = new MediaRecorder();// 这里选麦克风作为录音的声源mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 录音文件的存放位置mediaRecorder.setOutputFile(file.getAbsolutePath());try {mediaRecorder.prepare();} catch (Exception e) {e.printStackTrace();}mediaRecorder.start();// 震动vibrator.vibrate(100);}}
}

需要注意的是,这个电话录音,是通过麦克风录制通话录音的,录制的效果一般。

AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="zhangphil.phonerecorder"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="14"android:targetSdkVersion="23" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><service android:name=".PhoneService" ></service><receiver android:name=".PhoneBroadcastReceiver" ><intent-filter><action android:name="android.intent.action.NEW_OUTGOING_CALL" /><action android:name="android.intent.action.BOOT_COMPLETED" /></intent-filter></receiver></application><uses-permission android:name="android.permission.READ_PHONE_STATE" ></uses-permission><!-- 拨打电话权限 --><uses-permission android:name="android.permission.CALL_PHONE" /><!-- 读取电话状态权限 --><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!-- SD卡读写权限 --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 录音权限 --><uses-permission android:name="android.permission.RECORD_AUDIO" /><!-- 震动权限 --><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" /></manifest>

Android电话录音相关推荐

  1. 关于android电话录音问题的详细分析

    关于android电话录音问题的详细分析 作者:老猫 一直以来都是在网络上看别人的文章,老老实实的做潜水员,今天一时兴起,写点东西,希望对大家有所帮助,不要再走同样的弯路. 本文是关于Android下 ...

  2. android电话录音(整理自网络)

    电话录音:  录自己的(http://m.oschina.net/blog/53493):  public void onCallStateChanged(int state, String inco ...

  3. android 电话录音保存到什么位置,手机的录音文件在哪个文件夹?不同的安卓手机存放的路径你都知道吗?...

    想必大家都有过在手机上进行录音的需求,记录一些比较重要的通话内容或信息,在完成录音后,你知道手机的录音文件存放在哪个文件夹了吗?下面小编将给大家介绍不同的安卓手机存放通话录音文件的路径,帮你轻松找到所 ...

  4. Android之关于电话录音原理,目前的方法还是只能录MIC

    对于android来讲,没有API直接支持对电话进行双向录音. 虽然MediaRecorder里面可以设置recodeRecorder.setAudioSource(MediaRecorder.Aud ...

  5. android service 样例(电话录音和获取系统当前时间)

    关于android service 的具体解释请參考: android四大组件--android service具体解释.以下将用两个实例具体呈现Android Service的两种实现. 一个是st ...

  6. android电话、短信黑白名单拦截、电话录音

    功能描述: 总的来说这是一个防骚扰的应用,设置黑名单,白名单,通话录音名单.添加到黑名单的联系人或号码将被拒绝来电或短信:添加到白名单的联系人或号码将通过来电或短信(除白名单以外的号码将被拒绝来电或短 ...

  7. Android(SpreadTurm)多语言版本电话录音系统报错

    Android(SpreadTurm)多语言版本电话录音系统报错 法语,印尼语,士耳其 [原因:] 从log里面分析com.android.phone进程重启. 如下log分析: 11-20 17:2 ...

  8. 71.android 简单的电话录音并保存到本地(来电和去电都支持)

    //第一步 先加权限 在AndroidManifest.xml里: //有打电话的权限,读写权限,还有录音权限. <uses-permission android:name="andr ...

  9. Android自动电话录音开发过程及问题

    已经做好了Android下的一个电话录音软件,利用的是service和broadcast广播,功能包括开机自启,来/去电自动录音.虽然还存在一些问题,但功能无影响.代码放在了github上:查看源码 ...

最新文章

  1. SAP PI 集成引擎
  2. 推荐的 PHP 读物列表
  3. 计算机网络试题大连工业大学,2016大连工业大学计算机网络考研大纲
  4. python教程:深copy浅copy
  5. [leetcode]Median of Two Sorted Arrays @ Python
  6. 《C++ Primer 第五版》(第6.3~6.7节)——返回指向数组/函数的指针,函数重载,默认形参、inline函数和constexpr函数
  7. C语言 · 8皇后问题
  8. 设计模式之单例模式(一)
  9. python 打印输出xml数据问题
  10. php 8发布,PHP 8.0.0 正式版发布啦,一个崭新时代来临!
  11. CALL TRANSACTION 和 SUBMIT 事务码之间的跳转
  12. 面对疫情,AI 能做什么?
  13. 全国城市行政区划码Json格式
  14. labview变量和C语言,LabVIEW
  15. r语言与数据挖掘最佳实践和经典案例数据_R语言与数据挖掘最佳实践和经典案例...
  16. cmd net 命令
  17. CCRC信息安全服务资质。
  18. 快乐玩前端:情人节请用代码表达你的爱意,女友收到都哭了
  19. SpringCloud中Feign进行服务调用 java.io.IOException: too many bytes written 问题解决
  20. 求生之路2服务器无限刷特感,求生之路2全部联机方法一览_求生之路2怎么联机_牛游戏网...

热门文章

  1. 2016年7月29日 星期五 --出埃及记 Exodus 15:25
  2. 使用DOM4J解析XML的大致步骤
  3. day7字典和集合作业
  4. 关于在移动端使用swiper插件,在苹果手机切换闪屏的问题
  5. 文本相识度算法(余弦相似性、简单共有词、编辑距离、SimHash、汉明距离、Jaccard相似性系数、欧几里得距离、曼哈顿距离 )
  6. OSChina 周五乱弹 —— 动弹的起源
  7. 查询student表中所有李姓的学生的 SQL语句怎么写
  8. AI 绘画咒语入门 - Stable Diffusion Prompt 语法指南 【成为初级魔导士吧!】
  9. js获取时间戳 时间戳转时间
  10. CAD看图软件:如何快速测量CAD图纸的局部面积?