跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Android开发实现的电话窃听和拦截应用

本文实例讲述了Android开发实现的电话窃听和拦截应用。分享给大家供大家参考,具体如下:今天学习了进程间Service的通信-->AIDL,基于前几天学习的广播机制,我做了一个简单的电话窃听和录音应用。现将具体实现方法附在下面,供大家参考,希望大家提供一些宝贵的意见。

业务需求分析:

1.当手机处于开机状态,监听服务就要启动,对来电进行监听录音。

2.设置电话黑名单,当来电是黑名单电话,则直接挂断。

实现步骤:

首先我们要定义一个电话监听的服务,对来电进行监听录音和拦截。具体代码如下:PhoneListenerService:package cn.yj3g.L21_PhoneListener;import java.lang.reflect.Method;import com.android.internal.telephony.ITelephony;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.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.widget.Toast;public class PhoneListenerService extends Service {private MediaRecorder recorder;private boolean recording = false;@Override public IBinder onBind(Intent intent) {return null;}@Override public void onCreate() {Log.v("TAG", "service onCreate()");super.onCreate();//电话服务管理TelephonyManager manager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);//监听电话状态manager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);}private PhoneStateListener listener = new PhoneStateListener() {/** @see TelephonyManager#CALL_STATE_IDLE 值为0** @see TelephonyManager#CALL_STATE_RINGING 值为1** @see TelephonyManager#CALL_STATE_OFFHOOK 值为2*/@Override public void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);//打印电话状态改变信息Log.v("TAG", "onCallStateChanged state=" + state);switch (state) {case TelephonyManager.CALL_STATE_IDLE: // 没有来电 或者 挂断stopRecord();break;case TelephonyManager.CALL_STATE_RINGING: // 响铃时stop(incomingNumber);break;case TelephonyManager.CALL_STATE_OFFHOOK: // 接起电话recordCalling();break;default:break;}}};//停止录音private void stopRecord() {Log.v("TAG", "stopRecord");if (recording) {recorder.stop();recorder.release();recording=false;}}//电话拦截public void stop(String s) {try {if (s.equals("110")) {Toast.makeText(this, "拦截成功", 0).show();Log.e("TAG", "此来电为黑名单号码,已被拦截!");//调用ITelephony.endCall()结束通话Method method = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);IBinder binder = (IBinder) method.invoke(null,new Object[] { TELEPHONY_SERVICE });ITelephony telephony = ITelephony.Stub.asInterface(binder);telephony.endCall();} else Toast.makeText(this, "不需拦截", 0).show();recording=false;} catch (Exception e) {e.printStackTrace();}}//进行录音private void recordCalling() {try {Log.v("TAG", "recordCalling");recorder = new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 读麦克风的声音recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 输出格式.3gp recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 编码方式recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+ "/"+ System.currentTimeMillis()+ ".3gp");// 存放的位置是放在sdcard目录下recorder.prepare();recorder.start();recording = true;} catch (Exception e) {e.printStackTrace();}}}

Android没有对外公开结束通话的API,如果需要结束通话,必须使用AIDL与电话管理服务进行通信, 并调用服务中的API实现结束通话,方法如下:

1.从Android的源代码中拷贝以下文件到项目中:

com/android/internal/telephony/ITelephony.aidl android/telephony/NeighboringCellInfo.aidl

如下图所示.开发工具会在gen目录下自动生成ITelephony.java

我们知道服务不能自己启动,需要手动启动,所以我们需要一个广播,当手机刚开机,我们就发送广播,启动监听电话的服务。下面是我写的一个发送广播的Receiver BootCompleteReceiver:package cn.yj3g.L21_PhoneListener;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class BootCompleteReceiver extends BroadcastReceiver {@Override public void onReceive(Context context, Intent intent) {//运用广播开启监听这个服务Log.v("TAG", "开机了!");Intent i = new Intent(context, PhoneListenerService.class);i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//由于之前运行不能实现功能,经老师的修改加上一个任务标志context.startService(i);}}

下面就是要在AndroidManifest.xml中配置相关的权限:具体代码如下:AndroidManifest.xml:

这样一个监听电话的应用就做好了。当安装此应用的手机开机时,来电就处于监听状态,这样就可以不动声色的对该手机的来电进行监听录音或者拦截,以达到不可告人的目的。

PS:关于Android Manifest功能与权限设置详细内容可参考本站在线工具:Android Manifest功能与权限描述大全:http://tools.jb51.net/table/AndroidManifest更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity操作技巧总结》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android文件操作技巧汇总》、《Android编程开发之SD卡操作方法汇总》、《Android资源操作技巧汇总》及《Android控件用法总结》希望本文所述对大家Android程序设计有所帮助。

您可能感兴趣的文章:android电话模拟器(示例代码) Android编程之短信窃听器实现方法Android 实现电话拦截及拦截提示音功能的开发Android广播接实现监听电话状态(电话的状态,拦截)

Android开发四大组件之实现电话拦截和电话录音Android拦截外拨电话程序示例Android实现短信验证码自动拦截读取功能Android中实现基本的短信拦截功能的代码示例Android编程实现拦截短信并屏蔽系统Notification的方法android短信拦截的实现代码

相关文章