通往Android的神奇之旅之电话录音

在service之监听段话状态的那篇代码基础上修改,在service监听中添加具体代码就可以了。

写电话录音功能保存文件的时候避免不了存盘,所以要申请权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

这个权限申请了向SD卡中写文件的权限

电话空闲时,录音器关闭清零

//                电话空闲
                case TelephonyManager.CALL_STATE_IDLE:
                    Log.i(TAG,"电话空闲");
//                    如果电话空闲判断录音器如果不空就停止录音并放掉录音亲资源
                    if (mediaRecorder != null){
                        mediaRecorder.stop();
                        mediaRecorder.release();
                        mediaRecorder = null;
                    }
                    break;

当电话铃响是准备录音器

//                    正在响铃
                case TelephonyManager.CALL_STATE_RINGING:
                    Log.i(TAG,"正在响铃");
//                    录音器准备工作
                    if (mediaRecorder == null){
                        getRecorder();
                    }
                    break;

当电话正在通话时,录音器开始录音

//                    正在通话
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.i(TAG,"电话通话");
//                    正在通话,判断有录音器就开始录音
                    if (mediaRecorder != null){
                        mediaRecorder.start();
                    }
                    break;

以下是录音器初始化准备工作的代码

 private void getRecorder() {
//        初始化录音器
        mediaRecorder = new MediaRecorder();

//        设置输入——麦克风
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//        设置音频编码
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//        设置音频输出格式
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//        设置音频输出路径
        mediaRecorder.setOutputFile("sdcard/audio.3gp");

        try {
//            打开录音器准备录音
            mediaRecorder.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

附上service完整代码

package com.example.jack.servicetest.service;


/**
 * 监听通话状态
 */

import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;

import java.io.IOException;

public class MyServiceForPhoneState extends Service{

    private final String TAG = "MyServiceForPhoneState";

    private MediaRecorder mediaRecorder;

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
//    创建service
    @Override
    public void onCreate() {
        super.onCreate();

        Log.i(TAG,"创建");
    }

    //    service运行中
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "运行");

        getService();
        return super.onStartCommand(intent, flags, startId);
    }

    private void getService() {
        TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        tm.listen(new MyPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);
    }

    class MyPhoneStateListener extends PhoneStateListener{
        @Override
        public void onCallStateChanged(int state, String phoneNumber) {
            super.onCallStateChanged(state, phoneNumber);

            switch (state){
//                电话空闲
                case TelephonyManager.CALL_STATE_IDLE:
                    Log.i(TAG,"电话空闲");
//                    如果电话空闲判断录音器如果不空就停止录音并放掉录音亲资源
                    if (mediaRecorder != null){
                        mediaRecorder.stop();
                        mediaRecorder = null;
                    }
                    break;
//                    正在响铃
                case TelephonyManager.CALL_STATE_RINGING:
                    Log.i(TAG,"正在响铃");
//                    录音器准备工作
                    if (mediaRecorder == null){
                        getRecorder();
                    }
                    break;
//                    正在通话
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.i(TAG,"电话通话");
//                    正在通话,判断有录音器就开始录音
                    if (mediaRecorder != null){
                        mediaRecorder.start();
                    }
                    break;
            }
        }
    }

    private void getRecorder() {
//        初始化录音器
        mediaRecorder = new MediaRecorder();

//        设置输入——麦克风
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//        设置音频编码
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//        设置音频输出格式
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//        设置音频输出路径
        mediaRecorder.setOutputFile("sdcard/audio.3gp");

        try {
//            打开录音器准备录音
            mediaRecorder.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //    service销毁
    @Override
    public void onDestroy() {

        Log.i(TAG,"销毁");
        super.onDestroy();
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值