小说网站 搜小说 无限网 烟雨红尘 小说爱好者 免费小说 免费小说网站

Android简易实战教程--第三十六话《电话录音》

今天完成一个简单的电话录音功能,即接通电话后,立即录下自己打电话的声音。实现起来比较简单:一个服务,一个TelephonyManager、一个MediaRecorder就够了。

1、布局提供一个开启录音服务的按钮。

2、服务里面代码如下:(代码详细解释都在里面了)

package com.itydl.recorder;

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);
		//监听电话状态
		//events:决定PhoneStateListener侦听什么内容,如:LISTEN_SIGNAL_STRENGTHS表示这个监听器监听信号强弱改变
		tm.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);
	}
	
	class MyListener extends PhoneStateListener{
		//一旦电话状态改变,此方法调用
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			super.onCallStateChanged(state, incomingNumber);
			
			switch (state) {
			case TelephonyManager.CALL_STATE_IDLE:
				System.out.println("空闲");
				if(recorder != null){
					//结束录音、释放资源
					recorder.stop();
					recorder.release();
					recorder = null;
				}
				break;
			case TelephonyManager.CALL_STATE_RINGING:
				System.out.println("响铃");
				//初始化录音机
				if(recorder == null){
					recorder = new MediaRecorder();
					//设置来源,默认麦克风MIC
					recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
					//设置输出格式,3GP
					recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
					//文件名称,录到哪里以及录下后的音频名称,因为上边输出格式使用3gp,因此使用.3gp作为后缀名
					recorder.setOutputFile("sdcard/luyin.3gp");
					//音频编码
					recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
					try {
						//准备。之后就可以开始录音了
						recorder.prepare();
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
				break;
			case TelephonyManager.CALL_STATE_OFFHOOK:
				System.out.println("摘机");
				//开始录音
				if(recorder != null){
					recorder.start();
				}
				break;

			}
		}
		
	}
	
}

而主活动里面的代码就是点击事件,开启这个录音服务。

package com.itydl.recorder;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;

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);
    }
}
电话录音功能,需要配置一些权限,如下:

<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" />

当然、服务一定要记得载清单文件完成配置

<service android:name="com.itydl.recorder.RecorderService"></service>

运行案例,给我们的手机或者模拟器打个电话,接听聊几句,我们会发现在sdcard根目录多了一个叫luyin.3gp的音频文件。这样,一个简易的录音功能就完毕了~~

posted on 2016-10-26 08:27  王小航  阅读(162)  评论(0编辑  收藏  举报

导航