首先定义一个Service来监听电话:
TelListener.java
package com.lk.tellistener; 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; public class TelListener extends Service { @Override public void onCreate() { TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); //注册监听器 监听电话状态 telephonyManager.listen(new TelPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); super.onCreate(); } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } final class TelPhoneStateListener extends PhoneStateListener { private String incomingNumber; private MediaRecorder mediaRecorder; @Override public void onCallStateChanged(int state, String incomingNumber) { try { switch (state) { case TelephonyManager.CALL_STATE_RINGING: //来电 this.incomingNumber = incomingNumber; break; case TelephonyManager.CALL_STATE_OFFHOOK: //接通电话 File file = new File(Environment.getExternalStorageDirectory(), this.incomingNumber + "_" + System.currentTimeMillis() + ".3gp"); this.mediaRecorder = new MediaRecorder(); this.mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置声音数据源 this.mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //设置输出格式为 3gp this.mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); this.mediaRecorder.setOutputFile(file.getAbsolutePath()); this.mediaRecorder.prepare(); this.mediaRecorder.start(); break; case TelephonyManager.CALL_STATE_IDLE: //挂断电话 if(this.mediaRecorder != null) { this.mediaRecorder.stop(); this.mediaRecorder.release(); this.mediaRecorder = null; } break; } super.onCallStateChanged(state, incomingNumber); } catch (Exception e) { e.printStackTrace(); } } } }
因为要在系统开机时就打开这个服务,所以定义一个BroadcastReceiver来监听开机事件,当开机时打开这个service
DeviceStartBroadcastReceiver.java
package com.lk.tellistener; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class DeviceStartBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent telServiceIntent = new Intent(context, TelListener.class); context.startService(telServiceIntent); } }
在清单文件中配置权限和声明service
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.lk.tellistener" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" /> <!-- 监听电话状态权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 写SDCard的权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 刻入声音权限 --> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="com.lk.tellistener.DeviceStartBroadcastReceiver"> <!-- 开机启动广播 --> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> <service android:name="com.lk.tellistener.TelListener"> </service> </application> </manifest>