您的位置:首页 > 移动开发 > Android开发

Android开发之监听手机来电

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

程序运行结果:

log_phone文件:






应用实例:

[java] view
plaincopy





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:</br>

* 监视手机来电

* 本实例实现了监视当前手机的来电状态,

* 并将来电与接听纪录写入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

[html] view
plaincopy





<!-- 授予应用读取通话状态的权限 -->

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

实例分析:

本应用是通过Activity实现的,如果把实例中的代码放到后台执行的Service中运行,并设置Service组件跟随系统启动,那个这种监听就可以做到“神不知,鬼不觉”了。嘿嘿.............
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: