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。
需要的权限:
主要代码:
PhoneListenerService.java
步骤:
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; } }
相关文章推荐
- Android 手机录制wav格式音频文件实现
- Android通过MediaRecorder API手机音频录制例子
- Android多媒体学习十:利用AudioRecord类实现自己的音频录制程序
- 研究了有一个月android下手机录制视频做直播,真的挺难搞的!
- Android多媒体学习十:利用AudioRecord类实现自己的音频录制程序
- Android多媒体学习十:利用AudioRecord类实现自己的音频录制程序
- 第56章、录制音频(从零开始学Android)
- Android多媒体学习八:调用Android自带的音频录制程序,实现录制
- Android 录制音频示例
- Android多媒体学习八:调用Android自带的音频录制程序,实现录制
- android多媒体部分学习笔记八------音频录制 mediaRecorder
- android音频通信(三)——双向通信(A2B协议)之手机接收
- 26、从头学Android之多媒体--使用MediaRecorder录制音频
- Android中将apk中的音频资源设置为手机铃声
- Android多媒体学习九:利用MediaRecorder类实现自己的音频录制程序
- Android视音频录制实现步骤(Android学习随笔八)
- 从头学Android之多媒体--使用MediaRecorder录制音频
- android多媒体部分学习笔记六----音频录制 mediaRecorder
- android视频录制、另一部手机实时观看方案
- android录音开发问题<记录1>:AudioRecord录制的音频文件如何用MediaPlayer类读取