Android手机录制音频

本文介绍如何使用MediaRecorder API实现手机通话录音功能。通过监听通话状态并利用MediaRecorder进行录音,可实现在通话过程中自动录音。文章提供了核心代码及所需权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我用到的是MediaRecorder的API用来录制手机音频,接下来就是演示一个demo了,我选择的是录制通话过程的音频,也就是实现了一个监听手机通话的小demo。

步骤:

1.开启一个服务;

2.使用TelephonyManager获取系统通话服务;

3.根据通话服务返回的状态码进行对应操作;

4.如果状态码为通话状态则:

        1)实例化一个音频捕获器(录音器)MediaRecorder   mr  =   new  MediaRecorder();

        2)指定录音器的生源,MIC是话筒的声音、VOICE_CALL是通话双方的声音         mr.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);

        3)设置录制文件的格式       mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);

        4)设置录制文件的路径以及名称          mr.setOutputFile(file);

        5)设置录制音频的品质             mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

        6)让录音机处于就绪状态         mr.prepare();

        7)启动录音      mr.start()。

注意以上设置顺序不要乱。

5.如果状态码为空闲状态则判断录音机是否被实例化,如果已经实例化则停止录音,并释放录音机资源,把录音机实例至null。



需要的权限:

<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"/>


主要代码:

PhoneListenerService.java

package com.example.phonelistener;

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.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

import java.io.File;
import java.io.IOException;

/**
 * Created by pactera on 2017/2/10.
 */

public class PhoneListenerService extends Service {

    private TelephonyManager tm;
    private MediaRecorder mr;//通话音频捕获器
    private PhoneStateListener listener;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        listener = new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state) {
                    case TelephonyManager.CALL_STATE_IDLE://电话空闲状态
                        if (mr != null) {
                            mr.stop();
                            mr.release();
                            mr = null;
                        }
                        break;
                    case TelephonyManager.CALL_STATE_OFFHOOK://通话状态
                        //实例化音频捕获器
                        mr = new MediaRecorder();
                        //指定录音机的生源,VOICE_CALL代表的是话筒和对方的声音
                        mr.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
                        //设置录制文件的格式
                        mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
                        //设置录制文件的路径以及名称
                        File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3gp");
                        mr.setOutputFile(file.getAbsolutePath());
                        //设置音频的品质
                        mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                        //就绪录音机
                        try {
                            mr.prepare();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        //启动录音机
                        mr.start();
                        break;
                    case TelephonyManager.CALL_STATE_RINGING://响铃状态
                        break;
                }
            }
        };
        tm.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);
    }

    @Override
    public void onDestroy() {
        if (mr != null) {
            mr.stop();
            mr.release();
            mr = null;
        }
        tm.listen(listener,PhoneStateListener.LISTEN_NONE);
        listener = null;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值