您的位置:首页 > 移动开发 > Android开发

Android手机录制音频

2017-02-10 16:56 169 查看
我用到的是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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: