zoukankan      html  css  js  c++  java
  • 监听手机录音

    需求分析:
            记录通话过程中的录音,并保存到指定路径~
          
    知识点:1.手机开机发出广播,广播接受者收到通知,开启service服务 
                  2.Service工作流程:
                        1.获取手机管理对象·
                        2.注冊监听器,对应手机状态
                        3.依据手机状态(振铃、通话、空暇),创建Mediaplay对象,暂停
     这里监听手机状态,加入权限
       <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    代码:
    TelephonyManager manager=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);//获取电话管理
      manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
        //用电话管理器注冊一个监听器,监听电话状态
    注意:手机状态监听这,能够监听多个状态,LISTEN_CALL_STATE监听的是手机状态的变化,下面该监听器其它的监听对象
    手机状态改变的state三种值:空暇、通话、挂断

    依据三种状态,处理Mediaplayer,代码

    public void onCallStateChanged(int state, String incomingNumber) { // 电话状态改变时运行该方法
    switch (state) {
    case TelephonyManager.CALL_STATE_RINGING:
    Log.d("Debug","振铃");
    num = incomingNumber; // 振铃时, 记录号码
    break;
    case TelephonyManager.CALL_STATE_OFFHOOK:
    Log.d("Debug","開始录音");
    startRecording(); // 摘机时, 開始录音
    break;
    case TelephonyManager.CALL_STATE_IDLE:
    Log.d("Debug","空暇状态");
    stopRecording(); // 空暇时, 结束录音
    break;
    }
    }
    思考:假设手机没有振铃?

    停止录音:
    private void stopRecording() {
    if (mRecorder != null) {
    mRecorder.stop(); // 停止
            mRecorder.release();      // 释放资源
            mRecorder = null; // 垃圾回收
    }
    }
    開始录音:
    private void startRecording() {
    try {
    Log.d("Debug", "startRecording");
    mRecorder = new MediaRecorder(); // 创建媒体记录器
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置音频源
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 设置输出格式
    mRecorder.setOutputFile("/mnt/sdcard/" + num + "_" + System.currentTimeMillis() + ".3gp");                             // 设置输出文件路径
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 设置编码
    mRecorder.prepare(); // 准备
    mRecorder.start(); // 開始
    } catch (Exception e) {
    e.printStackTrace();
    } }}}
    总结:MediaPlayer操作过程,停止和录音过程~,这里使用到了sdcard所以,必须声明权限。
         <uses-permission android:name="android.permission.RECORD_AUDIO"/>//同意程序进行录音
         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //写入存储卡

    清单文件的配置信息:
     <receiver  android:name=".PhoneBroacast">
                <intent-filter >
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                </intent-filter>
            </receiver>
            <service android:name=".PhoneService">   
            </service>
  • 相关阅读:
    java获取src下包的文件的路径
    Java获取日期属于当年第几周
    DIV的内容自动换行
    js验证身份证格式
    处理 WebService 中的 Map 对象
    Oracle使用row_number()函数查询时增加序号列
    SpingMVC实现集合参数(Could not instantiate bean class [java.util.List])
    利用JS实现在li中添加或删除class属性
    栈的应用之中缀表达式转后缀表达式
    栈的应用之判断括号匹配
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4083446.html
Copyright © 2011-2022 走看看