赵雅智_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卡文件


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值