Android电话录音

本例是一个通用的电话录音方案,先创建一个广播接收,

package zhangphil.phonerecorder;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class PhoneBroadcastReceiver extends BroadcastReceiver {// BroadcastReceiver@Overridepublic void onReceive(Context context, Intent intent) {// 外拨电话if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {System.out.println(Intent.ACTION_NEW_OUTGOING_CALL);// 获得外拨号码String EXTRA_PHONE_NUMBER = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);Log.d(this.getClass().getName(), EXTRA_PHONE_NUMBER);// 开始启动后台服务录音Intent service = new Intent(context, PhoneService.class);context.startService(service);}}}


注册到AndroidManifest.xml里面,然后开机启动(通过设置广播过滤器):

<action android:name="android.intent.action.BOOT_COMPLETED" />


同时增加外拨电话的广播过滤器:

<action android:name="android.intent.action.NEW_OUTGOING_CALL" />


只要有外拨电话就启动后台服务,然后录制通话录音。录音文件存放在SD卡的根目录下。全程将使用PhoneStateListener监听电话通话状态,通话开始然后就开启MediaRecorder录音,通话结束,然后就使MediaRecorder停止录音。

package zhangphil.phonerecorder;import java.io.File;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.os.Vibrator;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;public class PhoneService extends Service {private File file;// 录音的格式private String fileName = "zhangphil.3gp";@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();String path = Environment.getExternalStorageDirectory().getAbsolutePath();file = new File(path, fileName);TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);telephonyManager.listen(new MyPhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);}private class MyPhoneListener extends PhoneStateListener {private MediaRecorder mediaRecorder;// 震动private Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);@Overridepublic void onCallStateChanged(int state, String incomingNumber) {try {switch (state) {case TelephonyManager.CALL_STATE_RINGING: // 来电break;case TelephonyManager.CALL_STATE_OFFHOOK: // 接通电话startRecordPhoneSound();break;// 没有通话(通话结束)case TelephonyManager.CALL_STATE_IDLE:if (mediaRecorder != null) {mediaRecorder.stop();mediaRecorder.release();mediaRecorder = null;// 震动vibrator.vibrate(100);}break;}} catch (Exception e) {e.printStackTrace();}}private void startRecordPhoneSound() {mediaRecorder = new MediaRecorder();// 这里选麦克风作为录音的声源mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 录音文件的存放位置mediaRecorder.setOutputFile(file.getAbsolutePath());try {mediaRecorder.prepare();} catch (Exception e) {e.printStackTrace();}mediaRecorder.start();// 震动vibrator.vibrate(100);}}}

需要注意的是,这个电话录音,是通过麦克风录制通话录音的,录制的效果一般。

AndroidManifest.xml文件:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="zhangphil.phonerecorder"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="14"        android:targetSdkVersion="23" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >                        <service android:name=".PhoneService" >        </service>        <receiver android:name=".PhoneBroadcastReceiver" >            <intent-filter>                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />                <action android:name="android.intent.action.BOOT_COMPLETED" />            </intent-filter>        </receiver>            </application>      <uses-permission android:name="android.permission.READ_PHONE_STATE" >    </uses-permission>         <!-- 拨打电话权限 -->    <uses-permission android:name="android.permission.CALL_PHONE" />    <!-- 读取电话状态权限 -->    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <!-- SD卡读写权限 -->    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <!-- 录音权限 -->    <uses-permission android:name="android.permission.RECORD_AUDIO" />    <!-- 震动权限 -->    <uses-permission android:name="android.permission.VIBRATE" />    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />    </manifest>

更多相关文章

  1. Mono for Android—初体验之“电话拨号器”
  2. Android(AIDL)自动重复拨号及挂断/接听电话
  3. 如何向Android模拟器打电话发短信
  4. 《程序人生 —— Android实现录音、播音、录制视频功能》
  5. android > 调用拨打电话 并子线程监控然后返回跳转
  6. 如何删除Android自带的应用程序?
  7. 如何向Android模拟器打电话发短信
  8. Android(安卓)MediaRecorder录制音频
  9. Android(安卓)android下的电话拨号器

随机推荐

  1. android 添加音乐作为铃声
  2. Android下MP3播放器的实现源代码02
  3. android用ImageView显示网络图片
  4. Android Audio代码分析21 - 创建AudioEff
  5. Android(安卓)Audio代码分析15 - testPla
  6. Android的string.xml文件中的特殊字符显
  7. Android Studio 导入so文件
  8. Android(安卓)动态申请存储权限
  9. 全屏显示问题
  10. Android总笔记(未全)