您的位置:首页 > 其它

demo_电话录音_Service

2016-05-20 14:35 274 查看
为了在 Android 应用中录制声音,Android提供了 MediaRecorder 类,关于MediaRecorder的详解大家可以参考《Android开发之MediaRecorder类详解》。

使用MediaRecorder录制声音的步骤:

1) 创建 MediaRecorder 对象。

2) 调用MediaRecorder对象的setAudioSource()方法设置声音来源,一般传入 MediaRecorder. AudioSource.MIC参数指定录制来自麦克风的声音。

3) 调用MediaRecorder对象的setOutputFormat()设置所录制的音频文件的格式

4) 调用MediaRecorder 对象的setAudioEncoder()、setAudioEncodingBitRate(intbitRate)、 setAudioSamplingRate(int samplingRate)设置所录制的声音的编码格式编码位率采样率等, 这些参数将可以控制所录制的声音的品质、文件的大小。一般来说,声音品质越好,声音文件越大。

5) 调用MediaRecorder的setOutputFile(Stringpath)方法设置录制的音频文件的保存位置

6) 调用MediaRecorder的prepare()方法准备录制

7) 调用MediaRecorder对象的start()方法开始录制

8) 录制完成,调用MediaRecorder对象的stop()方法停止录制,并调用release()方法释放资源

提示:1.上面的步骤中第3和第4两个步骤千万不能搞反,否则程序将会抛出lllegalStateException 异常。

2. 设置声音编码格式要和声音的输出格式相对应,不然录制的音频文件不标准。如果编码格式和输出格式不对应,录制出的音频文件虽然可以播放,但是将多个这类音频文件合并之后,会出现只播放合并文件中的部分文件。

应用实例

使用MediaRecorder录制声音:

实例代码:

MainActivity.代码:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public void click(View v){
Intent intent = new Intent(this,RecorderService.class);
startService(intent);
}

RecorderService文件中的代码

<span style="color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; line-height: 28px; text-indent: 28px; background-color: rgb(240, 240, 240);">package com.demo.tel;</span>
import java.io.IOException;

import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

public class RecorderService extends Service {
private MediaRecorder recorder;
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
//在创建服务的时候就开始监听
public void onCreate() {
super.onCreate();
//获取电话管理器
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
/**
* 监听电话状态
* arg0:电话状态监听
* arg1:监听的什么事件
*/
tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
}

//设置监听
class MyListener extends PhoneStateListener{

//电话状态改变时回调
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);

//判断当前电话的状态
switch (state) {
//电话闲置
case TelephonyManager.CALL_STATE_IDLE:
//8) 录制完成,调用MediaRecorder对象的stop()方法停止录制,并调用release()方法释放资源。
if(recorder != null){
//停止录音
recorder.stop();
//释放资源
recorder.release();
recorder = null;
}
break;
//电话响铃
case TelephonyManager.CALL_STATE_RINGING:
System.out.println("电话响铃");
if(recorder == null){
//1)创建 MediaRecorder 对象。
recorder = new MediaRecorder();

/**
* 2) 调用MediaRecorder对象的setAudioSource()方法设置声音来源,
* 一般传入 MediaRecorder. AudioSource.MIC参数指定录制来自麦克风的声音。
*/
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

//3) 调用MediaRecorder对象的setOutputFormat()设置所录制的音频文件的格式。
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

/**
* 4) 调用MediaRecorder 对象的setAudioEncoder()、
* setAudioEncodingBitRate(intbitRate)、
* setAudioSamplingRate(int samplingRate)
* 设置所录制的声音的编码格式、编码位率、采样率等,
* 这些参数将可以控制所录制的声音的品质、文件的大小。
* 一般来说,声音品质越好,声音文件越大。
*/
recorder.setAudioEncoder(MediaRecorder.OutputFormat.THREE_GPP);

//5) 调用MediaRecorder的setOutputFile(Stringpath)方法设置录制的音频文件的保存位置。
recorder.setOutputFile("sdcard/voice.3gp");

//6) 调用MediaRecorder的prepare()方法准备录制。
try {
recorder.prepare();
} catch (Exception e) {
e.printStackTrace();
}

}
break;
//电话摘机
case TelephonyManager.CALL_STATE_OFFHOOK:
//7) 调用MediaRecorder对象的start()方法开始录制。
if(recorder != null){
recorder.start();
}

break;
}
}

}

}
xml文件添加权限和注册Service

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<service android:name="com.demo.tel.RecorderService"></service>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: