基于Android的电话窃听器的实现
2018-09-10刘慧梅
刘慧梅
摘 要:Android是一种基于Linux的开放源代码的操作系统,主要应用于移动设备中,如智能手机和平板电脑,它由Google公司和开放手机联盟开发及领导。本文介绍了Android应用开发的主要技术,并且通过Android Studio环境下开发一个电话窃听器案例来详细探讨Service服务的特点及其在Android应用程序中的使用。
关键词:Android开发;窃听器;服务Service
中图分类号:TP311.52 文献标识码:A 文章编号:2096-4706(2018)02-0083-02
The Implementation of Android-based Phone Eavesdropper
LIU Huimei
(Shaanxi Institute of Technology,Xi'an 710300,China)
Abstract:Android is an open source operation system based on Linux. It is mainly used in mobile devices,such as smart phones and tablet computers. It is led and developed by Google and open cell alliance. This paper introduces the main technology of Android application development,and develops a case of phone wiretap in Android Studio environment,and discusses the characteristics of Service service and its application in Andorid application.
Keywords:Android development;eavesdropper;service
1 Android应用开发前景
移动互联网的发展和成熟,为手机APP应用软件的开发与推广提供了广阔的发展空间。手机应用也从个人应用开发逐渐拓展到商务领域,多数企业在软件公司定制软件时,要求同时开发对应的App应用软件,并且在经营使用过程中,将APP作为其推广企业品牌和提供销售内容的重要渠道。手机APP应用的开发与使用已经成为各行各业的需求,也逐渐占据了移动互联网市场的重要位置。
2 Android应用开发关键技术
Android应用是基于组件开发的,一共有四种常用组件。组件一是Activity,为用户提供可视化界面,实现用户与系统的交互功能。每个Activity对应一个用户界面,界面上可以添加多个控件,如文本框、单/复选按钮,每个控件可以设置监听器,进行事件处理,来响应用户对控件的操作。组件二是服务Service,它是长期运行在后台的用户组件,没有用户界面。它适合执行一些不需要显示界面,但需要执行一段时间的后台操作,比如下载数据,播放音乐等。组件三是内容提供者Content Provider,它的功能是实现不同程序之间的数据共享,它不仅允许一个程序访问另一个程序中的数据,还可以选择只对哪部分数据进行共享,从而保证程序中的隐私数据。组件四是广播接收者Broadcast Receiver,广播是应用程序之間进行消息传递的机制,例如当收到一条短信时会发送一条提示广播。应用程序想要接收广播中的消息就要使用广播接收者。
3 Service和Thread的关系
一个进程在执行过程中可以开启多个线程,这些线程是可以相互独立、并发执行的。通常会将一些耗时操作放在线程上执行,这样就不会阻塞主线程的运行。如果在一个Activity中创建子线程,别的Activity是无法操作的,而且当Activity被销毁后,就不可以重新得到之前创建的子线程了。这样,当应用程序被关闭后会成为空进程,很容易被系统回收。多个Activity可以控制同一个Service,系统只会创建一个Service的实例,多个Activity都可以操作服务中的方法。当Activity被销毁或者程序被关闭时,只要进程还在,Service可以继续在后台运行,而且服务进程不容易被回收,即使由于内存不足被回收了,只要内存充足后系统还会复活被关闭的服务进程。
4 电话窃听器的实现
服务是在后台长期运行且没有界面的组件,需要用户调用stopService()或手动关闭。本案例在Android Studio2.3.1平台下开发,主要功能是开启一个服务,即长期在后台监控电话,当电话处于通话状态时,即启动录音机进行录音,以实现监控电话功能。
4.1 新建项目
在AndroidStudio环境中新建项目,名为PhoneListener。
4.2 创建、开启和关闭服务
在项目中新建服务类PhoneService,其父类为Service。Android中四大组件的使用均需要在清单文件中进行配置,所以PhoneService需要在清单文件中进行配置,在标签中添加
定义好服务后,需要开启服务。在MainActivity.java的onCreate()中新建Intent意图对象,指定开启的服务名称。Intent it=new Intent(this,PhoneService.class);startService(it);这时可以运行程序观察服务的执行。程序运行后出现主界面,在模拟器上按后退键退出程序,这时把Activity关闭掉,但服务还在执行。打开Logcat视图查看日志信息,输出“服务被创建了”信息,但并没有服务被销毁的输出,说明服务还在执行。
服务的结束需要手动操作,打开模拟器设置->应用->正在运行->PhoneListener,点击“停止”关闭服务。查看日志,输出“服务被销毁了”信息。
4.3 在服务中监视用户电话状态的变化
要监听电话状态,首先要获取管理通话信息的电话管理器,它也是系统中的一个服务。在PhoneService类的onCreate()方法中添加语句:TelephonyManager telMan=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);telMan即为获得的电话管理器,该对象调用listen()方法,去注册监听器对象telMan.listen(listener,PhoneStateListener.LISTEN_CALL_STATE);第一个参数代表监听器,是类PhoneStateListener的对象,参数2代表监听手机的何种状态,此处设置监听手机打电话状态。
定义内部类MyPhoneListener继承PhoneStateListener,重写里面的onCallStateChanged()方法。该方法是回调函数,当手机电话状态发生变化时,就会执行这个回调函数。
4.4 电话窃听
当手机铃响时,准备录音机;当手机处理通话状态时开启录音机,录制话筒中所说信息;当手机电话处于空闲状态时,结束录音,把刚才录的音频文件保存到手机SD卡。
private class MyPhoneListener extends Phone StateListener{
public void onCallStateChanged(int state,String inPhoneNum){
//两个参数分别表示电话状态和来电的电话号码
super.onCallStateChanged(state,inPhoneNum);
try {
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
if(rc!=null) { //手机空闲时将录音机关闭
rc.stop();
rc.release();
rc=null;
}
break;
case TelephonyManager.CALL_STATE_RINGING:
System.out.println(“电话号码--------”+inPhoneNum);
rc=new MediaRecorder();//手机来电时新建录音机
rc.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置录音的输入源从话筒里获取,表示仅录制接电话者的声音,如需双向录音可打开扬声器
rc.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置音频格式为3gp
rc.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//指定編码方式
rc.setOutputFile("/sdcard/"+System.currentTimeMillis()+".3gp");//指定录制的声音写到哪里,此处设置写到电话SD卡上
rc.prepare();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
if(rc!=null) rc.start();//手机接听时开启录音机
break;
}
} catch (Exception e){e.printStackTrace(); }
}
}
4.5 权限添加
应用中一些操作涉及隐私及手机存储设备的访问,需要添加如下权限:(1)监控手机状态需要添加权限:“android.permission.READ_PHONE_STATE”。(2)录制声音是侵犯隐私的,需要添加权限:“android.permission.RECORD_AUDIO”。(3)写外部存储设备权限:“android.permission.WRITE_EXTERNAL_STORAGE”。
5 结 论
电话窃听器最终实现的功能是将录制的音频文件上传到服务器。这需要不断地监控电话状态,只要有通话,就需录音,通话结束,连接服务器上传音频文件。因此案例选用服务实现手机监控与录音功能。由于服务运行在主线程上,为防止主线程的运行阻塞,可以在Service中再创建一个子线程,然后在子线程中实现电话监控功能。
参考文献:
[1] 黑马程序员.Android移动开发基础案例教程 [M].人民邮电出版社,2017.
[2] 胡忠望,莫家庆.基于Android的移动应用开发研究 [J].软件导刊,2014,13(11):18-20.
[3] 韩文智,骆文亮.Android平台的移动APP开发方法与应用研究 [J].四川理工学院学报(自然科学版),2015,28(3):22-26.
[4] 赵静.Android系统架构及应用程序开发研究 [J].自动化与仪器仪表,2017(1):86-87+90.