Android开发之监听手机来电

      TelephonyManager是一个管理手机通话状态、电话网络信息的服务类,该类提供了大量的getXxx(),方法获取电话网络的相关信息。关于TelephonyManager的详解可以参照:Android开发之获取手机SIM卡信息

程序运行结果:


log_phone文件:

Android开发之监听手机来电_第1张图片

应用实例:


package com.jph.monitorphone;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
/**
 * Describe:
* 监视手机来电 * 本实例实现了监视当前手机的来电状态, * 并将来电与接听纪录写入log_phone文件中 * @author jph * Date:2014.07.22 * */ public class MonitorPhone extends Activity { TelephonyManager tManager; private String incomingNumber; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取系统的TelephonyManager对象 tManager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); //创建一个通话状态监听器 PhoneStateListener pListener=new PhoneStateListener(){ @Override public void onCallStateChanged(int state, String number) { // TODO Auto-generated method stub switch (state) { case TelephonyManager.CALL_STATE_IDLE://无任何状态 break; case TelephonyManager.CALL_STATE_OFFHOOK://接听来电 writeFile(state,number); break; case TelephonyManager.CALL_STATE_RINGING://来电 incomingNumber=number; writeFile(state,number); break; default: break; } super.onCallStateChanged(state, incomingNumber); } }; //为tManager添加监听器 tManager.listen(pListener, PhoneStateListener.LISTEN_CALL_STATE); } //将接听电话,与来电信息写入到文件 protected void writeFile(int state, String number) { // TODO Auto-generated method stub StringBuffer sb=new StringBuffer(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh.mm.ss"); sb.append("时间:"+sdf.format(new Date())+"\n"); switch (state) { case TelephonyManager.CALL_STATE_OFFHOOK://接听来电 sb.append("接听了电话号为:"+incomingNumber+"的电话"); break; case TelephonyManager.CALL_STATE_RINGING://来电 sb.append(number+"来电"); break; } sb.append("\n-----------------------\n"); FileOutputStream fos=null; try { //以追加的方式打开输出流 fos=openFileOutput("log_phone", MODE_APPEND); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } //将输出流封装成PrintStream对象 PrintStream ps=new PrintStream(fos); //输入文件内容 ps.println(sb.toString()); //关闭输出流 ps.close(); } }

最后别忘为应用添加相应的权限:

AndroidManifest.xml



	

实例分析:

       本应用是通过Activity实现的,如果把实例中的代码放到后台执行的Service中运行,并设置Service组件跟随系统启动,那个这种监听就可以做到“神不知,鬼不觉”了。嘿嘿.............

你可能感兴趣的:(Android开发)