来电话后进行录音
1.建 一个service
public class PhoneListenerService extends Service {
private static final String SDPATH = Environment.getExternalStorageDirectory() + "/";
private static final String TAG = "PhoneListenerService";
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
PhoneStateListener stateListener = new PhoneStateListener() {
private MediaRecorder recorder;
private String incomingNumber;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch(state) {
case TelephonyManager.CALL_STATE_IDLE ://无电话
if(recorder != null){
this.incomingNumber = null;
recorder.stop();
recorder.release();
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK : //接电话
Log.i(TAG, "start record");
try {
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
SimpleDateFormat format = new SimpleDateFormat("yymmddhhmms");
//保存的文件名
String filename = this.incomingNumber + "_" + format.format(new Date()) + ".3gp";
//文件保存位置
recorder.setOutputFile(SDPATH + filename);
recorder.prepare();
recorder.start();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
break;
case TelephonyManager.CALL_STATE_RINGING : //来电话
Log.i(TAG, "new ring");
this.incomingNumber = incomingNumber;
recorder = new MediaRecorder();
break;
}
super.onCallStateChanged(state, incomingNumber);
}
};
//监听电话
Log.i(TAG, "start listener");
telephonyManager.listen(stateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
2.建一个广播,在开机时调用
public class BootBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("broadcast");
Intent service = new Intent(context, PhoneListenerService.class);
context.startService(service);
}
}
3.xml文件中写
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.halleluja.phone"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:name=".PhoneListenerService"/>
<receiver android:name=".BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
<uses-sdk android:minSdkVersion="7" />
<!-- 录音权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!-- 电话状态权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 启动权限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<!-- sdcard文件创建删除权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- sdcard写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>