首页 > 代码库 > 赵雅智_service电话监听2加接通电话录音

赵雅智_service电话监听2加接通电话录音

步骤:

  1. 创建CallStateService继承Service
  2. 取得电话服务
  3. 监听电话动作
    1. 电话监听的对象
      1. 没有电话时
        1. 停止刻录
        2. 重设
        3. 刻录完成一定要释放资源
      2. 电话响铃时
        1. 从麦克风采集声音
        2. 内容输出格式
        3. 音频编码方式
        4. 获取sd卡目录并存入
      3. 电话接通时
        1. 开始录制
    2. 电话监听的行为
  4. 启动service
  5. 注册service并添加监听电话状态的权限
    1. 监听电话状态权限
    2. sd卡读写权限
    3. 音频录制权限

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.callstatelistener"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <!-- 监听电话状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 音频录制的权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
   <!-- 向SD卡读写的权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.callstatelistener.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 注册service -->
        <service android:name="com.example.callstatelistener.CallStateService"></service>
        
    </application>
 
</manifest>

CallStateService.java

package com.example.callstatelistener;

import java.io.File;
import java.io.IOException;

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 android.util.Log;

/**
 * 监听电话状态service
 * 
 * @author zhaoyazhi
 * 
 *         2014-6-17
 */
public class CallStateService extends Service {
	public static final String TAG = "aaa";

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void onCreate() {
		super.onCreate();
		// 取得电话服务
		TelephonyManager telManager = (TelephonyManager) this
				.getSystemService(Context.TELEPHONY_SERVICE);
		// 电话监听的对象,电话监听的行为
		telManager.listen(new MyPhoneStateListener(),
				PhoneStateListener.LISTEN_CALL_STATE);
	}

	class MyPhoneStateListener extends PhoneStateListener {
		private MediaRecorder recorder;
		/**
		 * int state电话状态。 String incomingNumber电话号码
		 */
		@Override
		public void onCallStateChanged(int state, String incomingNumber) {
			super.onCallStateChanged(state, incomingNumber);
			
			switch (state) {
			case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */
				if (recorder != null) {
					recorder.stop();// 停止刻录
					recorder.reset(); // 重设
					recorder.release(); // 刻录完成一定要释放资源
				}
				Log.i(TAG, "------------------没有电话来");
				break;
			case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */
				Log.i(TAG, "------------------来电话了---并且响铃");
				recorder = new MediaRecorder();
				recorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 从麦克风采集声音
				recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 内容输出格式
				recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 音频编码方式
				// 获取sd卡目录
				File dir = Environment.getExternalStorageDirectory();
				recorder.setOutputFile(dir.getPath()+ "/csdn.amr");
				try {
					recorder.prepare(); // 预期准备
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				break;
			case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */
				Log.i(TAG, "------------------通话中");
				if (recorder != null) {
					recorder.start(); // 开始刻录
				}
				break;
			default:
				break;
			}

		};
	}
}

MainActivity.java
  1. package com.example.callstatelistener;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6.   
  7. public class MainActivity extends Activity {  
  8.   
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.activity_main);  
  13.         //intent 意图  
  14.         Intent service = new Intent(MainActivity.this, CallStateService.class);  
  15.         //启动service服务  
  16.         this.startService(service);  
  17.     }  
  18. }  

查看sd卡文件