Android电话录音
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电话录音相关推荐
- 关于android电话录音问题的详细分析
关于android电话录音问题的详细分析 作者:老猫 一直以来都是在网络上看别人的文章,老老实实的做潜水员,今天一时兴起,写点东西,希望对大家有所帮助,不要再走同样的弯路. 本文是关于Android下 ...
- android电话录音(整理自网络)
电话录音: 录自己的(http://m.oschina.net/blog/53493): public void onCallStateChanged(int state, String inco ...
- android 电话录音保存到什么位置,手机的录音文件在哪个文件夹?不同的安卓手机存放的路径你都知道吗?...
想必大家都有过在手机上进行录音的需求,记录一些比较重要的通话内容或信息,在完成录音后,你知道手机的录音文件存放在哪个文件夹了吗?下面小编将给大家介绍不同的安卓手机存放通话录音文件的路径,帮你轻松找到所 ...
- Android之关于电话录音原理,目前的方法还是只能录MIC
对于android来讲,没有API直接支持对电话进行双向录音. 虽然MediaRecorder里面可以设置recodeRecorder.setAudioSource(MediaRecorder.Aud ...
- android service 样例(电话录音和获取系统当前时间)
关于android service 的具体解释请參考: android四大组件--android service具体解释.以下将用两个实例具体呈现Android Service的两种实现. 一个是st ...
- android电话、短信黑白名单拦截、电话录音
功能描述: 总的来说这是一个防骚扰的应用,设置黑名单,白名单,通话录音名单.添加到黑名单的联系人或号码将被拒绝来电或短信:添加到白名单的联系人或号码将通过来电或短信(除白名单以外的号码将被拒绝来电或短 ...
- Android(SpreadTurm)多语言版本电话录音系统报错
Android(SpreadTurm)多语言版本电话录音系统报错 法语,印尼语,士耳其 [原因:] 从log里面分析com.android.phone进程重启. 如下log分析: 11-20 17:2 ...
- 71.android 简单的电话录音并保存到本地(来电和去电都支持)
//第一步 先加权限 在AndroidManifest.xml里: //有打电话的权限,读写权限,还有录音权限. <uses-permission android:name="andr ...
- Android自动电话录音开发过程及问题
已经做好了Android下的一个电话录音软件,利用的是service和broadcast广播,功能包括开机自启,来/去电自动录音.虽然还存在一些问题,但功能无影响.代码放在了github上:查看源码 ...
最新文章
- SAP PI 集成引擎
- 推荐的 PHP 读物列表
- 计算机网络试题大连工业大学,2016大连工业大学计算机网络考研大纲
- python教程:深copy浅copy
- [leetcode]Median of Two Sorted Arrays @ Python
- 《C++ Primer 第五版》(第6.3~6.7节)——返回指向数组/函数的指针,函数重载,默认形参、inline函数和constexpr函数
- C语言 · 8皇后问题
- 设计模式之单例模式(一)
- python 打印输出xml数据问题
- php 8发布,PHP 8.0.0 正式版发布啦,一个崭新时代来临!
- CALL TRANSACTION 和 SUBMIT 事务码之间的跳转
- 面对疫情,AI 能做什么?
- 全国城市行政区划码Json格式
- labview变量和C语言,LabVIEW
- r语言与数据挖掘最佳实践和经典案例数据_R语言与数据挖掘最佳实践和经典案例...
- cmd net 命令
- CCRC信息安全服务资质。
- 快乐玩前端:情人节请用代码表达你的爱意,女友收到都哭了
- SpringCloud中Feign进行服务调用 java.io.IOException: too many bytes written 问题解决
- 求生之路2服务器无限刷特感,求生之路2全部联机方法一览_求生之路2怎么联机_牛游戏网...
热门文章
- 2016年7月29日 星期五 --出埃及记 Exodus 15:25
- 使用DOM4J解析XML的大致步骤
- day7字典和集合作业
- 关于在移动端使用swiper插件,在苹果手机切换闪屏的问题
- 文本相识度算法(余弦相似性、简单共有词、编辑距离、SimHash、汉明距离、Jaccard相似性系数、欧几里得距离、曼哈顿距离 )
- OSChina 周五乱弹 —— 动弹的起源
- 查询student表中所有李姓的学生的 SQL语句怎么写
- AI 绘画咒语入门 - Stable Diffusion Prompt 语法指南 【成为初级魔导士吧!】
- js获取时间戳 时间戳转时间
- CAD看图软件:如何快速测量CAD图纸的局部面积?