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扩展教程【方法】  微信公众帐号开发教程之图文消息全攻略  如何快速搭建二级域名独立网站?  如何获取免费开源的自助建站系统源码?  高防服务器租用指南:配置选择与快速部署攻略  ,在苏州找工作,上哪个网站比较好?  独立制作一个网站多少钱,建立网站需要花多少钱?