您现在的位置是:首页 > 文章详情

Android--录音

日期:2018-07-31点击:297
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/81327067

录音分为环境录音和通话录音。

环境录音:

public class audio { private static MediaRecorder mMediaRecorder; private static String fileName= ""; @SuppressLint("LongLogTag") public static void startRecord() { // 开始录音 /* ①Initial:实例化MediaRecorder对象 */ if (mMediaRecorder == null) mMediaRecorder = new MediaRecorder(); try { /* ②setAudioSource/setVedioSource */ mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 设置麦克风 /* * ②设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default THREE_GPP(3gp格式 * ,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB) */ mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); /* ②设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default 声音的(波形)的采样 */ mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); fileName = DateFormat.format("yyyyMMdd_HHmmss", Calendar.getInstance(Locale.CHINA)) + ".m4a"; MakeFile.makeRootDirectory(Environment.getExternalStorageDirectory().getPath()+"/Android/audio/"); String filePath = Environment.getExternalStorageDirectory().getPath()+"/Android/audio/" + fileName; /* ③准备 */ mMediaRecorder.setOutputFile(filePath); mMediaRecorder.prepare(); /* ④开始 */ mMediaRecorder.start(); } catch (IllegalStateException e) { Log.i("call startAmr(File mRecAudioFile) failed!" ,e.getMessage()); } catch (IOException e) { Log.i("call startAmr(File mRecAudioFile) failed!", e.getMessage()); } } public static void stopRecord() { try { mMediaRecorder.stop(); mMediaRecorder.release(); mMediaRecorder = null; } catch (RuntimeException e) { Log.e("errp",e.toString()); mMediaRecorder.reset(); mMediaRecorder.release(); mMediaRecorder = null; } } }

通话录音,在service里面,可以写守护进程:

import android.app.Service; 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 android.util.Log; import java.io.File; public class SystemService extends Service { // 电话管理器 private TelephonyManager tm; // 监听器对象 private MyListener listener; //声明录音机 private MediaRecorder mediaRecorder; @Override public IBinder onBind(Intent intent) { return null; } /** * 服务创建的时候调用的方法 */ @Override public void onCreate() { // 后台监听电话的呼叫状态。 // 得到电话管理器 tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE); listener = new MyListener(); tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); super.onCreate(); } private class MyListener extends PhoneStateListener { // 当电话的呼叫状态发生变化的时候调用的方法 @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); try { switch (state) { case TelephonyManager.CALL_STATE_IDLE://空闲状态。 if(mediaRecorder!=null){ //8.停止捕获 mediaRecorder.stop(); //9.释放资源 mediaRecorder.release(); mediaRecorder = null; //TODO 这个地方你可以将录制完毕的音频文件上传到服务器,这样就可以监听了 Log.i("SystemService", "音频文件录制完毕,可以在后台上传到服务器"); } break; case TelephonyManager.CALL_STATE_RINGING://零响状态。 break; case TelephonyManager.CALL_STATE_OFFHOOK://通话状态 //开始录音 //1.实例化一个录音机 mediaRecorder = new MediaRecorder(); //2.指定录音机的声音源 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //3.设置录制的文件输出的格式 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); //4.指定录音文件的名称 File file = new File(Environment.getExternalStorageDirectory().getPath()+"/Android/audio/",System.currentTimeMillis()+".m4a"); mediaRecorder.setOutputFile(file.getAbsolutePath()); //5.设置音频的编码 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); //6.准备开始录音 mediaRecorder.prepare(); //7.开始录音 mediaRecorder.start(); break; default: break; } } catch (Exception e) { e.printStackTrace(); } } } /** * 服务销毁的时候调用的方法 */ @Override public void onDestroy() { super.onDestroy(); // 取消电话的监听,采取线程守护的方法,当一个服务关闭后,开启另外一个服务,除非你很快把两个服务同时关闭才能完成 Intent i = new Intent(this,SystemService2.class); startService(i); tm.listen(listener, PhoneStateListener.LISTEN_NONE); listener = null; } } 

权限:

<!--额外的权限--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>

 

原文链接:https://yq.aliyun.com/articles/631434
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章