Android编程实现通话录音功能的方法
发布时间 - 2026-01-11 01:37:50 点击率:次本文实例讲述了Android编程实现通话录音功能的方法。分享给大家供大家参考,具体如下:

因受系统限制,只能录自已麦的声音,录不到对方的声音,可能需要改内核才能实现双向录音;
接通电话和挂断电话时,震动一下;
使用广播接收者实现自启动;
服务代码:
package com.eboy.phoneListener;
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;
import android.widget.Toast;
public class phoneService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new PhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
}
private final class PhoneListener extends PhoneStateListener{
private MediaRecorder mediaRecorder;
private File file;
private Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
@Override
public void onCallStateChanged(int state, String incomingNumber) {
try {
switch (state){
case TelephonyManager.CALL_STATE_RINGING: //来电
break;
case TelephonyManager.CALL_STATE_OFFHOOK: //接通电话
file = new File(Environment.getExternalStorageDirectory(), incomingNumber + System.currentTimeMillis() + ".3gp");
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile(file.getAbsolutePath());
mediaRecorder.prepare();
mediaRecorder.start();
Toast.makeText(getApplicationContext(), "电话已接通,开始录音。", Toast.LENGTH_SHORT).show();
//震动一下
vibrator.vibrate(100);
break;
case TelephonyManager.CALL_STATE_IDLE: //挂断电话
if (mediaRecorder != null){
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
Toast.makeText(getApplicationContext(), "电话已挂断,录音停止。", Toast.LENGTH_SHORT).show();
//震动一下
vibrator.vibrate(100);
}
break;
}
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
通过广播接收者实现自启动,代码:
package com.eboy.phoneListener;
import android.content.Context;
import android.content.Intent;
public class BroadcastReceiver extends android.content.BroadcastReceiver {
@Override
public void onReceive(Context arg0, Intent arg1) {
Intent service = new Intent(arg0, phoneService.class);
arg0.startService(service);
}
}
main.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.eboy.phoneListener"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />
<application android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">
<service android:name=".phoneService"></service>
<receiver android:name=".BroadcastReceiver">
<intent-filter >
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
<!-- 读取电话状态权限 -->
<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"/>
</manifest>
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作json格式数据技巧总结》、《Android文件操作技巧汇总》、《Android资源操作技巧汇总》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
# Android
# 通话录音
# Android实现录音功能实现实例(MediaRecorder)
# Android实现语音播放与录音功能
# android语音即时通讯之录音、播放功能实现代码
# Android 录音与播放功能的简单实例
# Android仿微信录音功能
# Android仿微信语音对讲录音功能
# Android录音功能的实现以及踩坑实战记录
# 操作技巧
# 进阶
# 相关内容
# 感兴趣
# 给大家
# 更多关于
# 所述
# 程序设计
# 录音功能
# 因受
# 讲述了
# 卡读写
# super
# onCreate
# null
# void
# TELEPHONY_SERVICE
# listen
# telephonyManager
# getSystemService
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在云指建站中生成FTP站点?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
制作旅游网站html,怎样注册旅游网站?
Swift中switch语句区间和元组模式匹配
Laravel如何优化应用性能?(缓存和优化命令)
js实现获取鼠标当前的位置
网页设计与网站制作内容,怎样注册网站?
如何在 Pandas 中基于一列条件计算另一列的分组均值
如何彻底删除建站之星生成的Banner?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
如何在阿里云通过域名搭建网站?
Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
Python文件异常处理策略_健壮性说明【指导】
*服务器网站为何频现安全漏洞?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何在自有机房高效搭建专业网站?
Laravel如何使用Service Container和依赖注入?(代码示例)
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何正确下载安装西数主机建站助手?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
JavaScript数据类型有哪些_如何准确判断一个变量的类型
javascript读取文本节点方法小结
Laravel如何使用Sanctum进行API认证?(SPA实战)
JavaScript如何实现继承_有哪些常用方法
网站制作企业,网站的banner和导航栏是指什么?
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
如何在宝塔面板创建新站点?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel如何使用Telescope进行调试?(安装和使用教程)
zabbix利用python脚本发送报警邮件的方法
Linux安全能力提升路径_长期防护思维说明【指导】
高端建站三要素:定制模板、企业官网与响应式设计优化
如何登录建站主机?访问步骤全解析
UC浏览器如何设置启动页 UC浏览器启动页设置方法
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
Laravel怎么清理缓存_Laravel optimize clear命令详解
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
微信公众帐号开发教程之图文消息全攻略
如何快速搭建二级域名独立网站?
如何获取免费开源的自助建站系统源码?
高防服务器租用指南:配置选择与快速部署攻略
,在苏州找工作,上哪个网站比较好?
独立制作一个网站多少钱,建立网站需要花多少钱?
下一篇:天天跳绳如何查看跳绳排名
下一篇:天天跳绳如何查看跳绳排名

