Android开发之监听手机来电

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

程序运行结果:


log_phone文件:


应用实例:


[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.jph.monitorphone;  
  2.   
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.PrintStream;  
  6. import java.text.SimpleDateFormat;  
  7. import java.util.Date;  
  8. import android.os.Bundle;  
  9. import android.app.Activity;  
  10. import android.content.Context;  
  11. import android.telephony.PhoneStateListener;  
  12. import android.telephony.TelephonyManager;  
  13. /** 
  14.  * Describe:</br> 
  15.  * 监视手机来电 
  16.  * 本实例实现了监视当前手机的来电状态, 
  17.  * 并将来电与接听纪录写入log_phone文件中 
  18.  * @author jph 
  19.  * Date:2014.07.22 
  20.  * */  
  21. public class MonitorPhone extends Activity {  
  22.     TelephonyManager tManager;  
  23.     private String incomingNumber;  
  24.     @Override  
  25.     protected void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.main);  
  28.         //获取系统的TelephonyManager对象  
  29.         tManager=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);  
  30.         //创建一个通话状态监听器  
  31.         PhoneStateListener pListener=new PhoneStateListener(){  
  32.             @Override  
  33.             public void onCallStateChanged(int state, String number) {  
  34.                 // TODO Auto-generated method stub  
  35.                 switch (state) {  
  36.                 case TelephonyManager.CALL_STATE_IDLE://无任何状态                     
  37.                     break;  
  38.                 case TelephonyManager.CALL_STATE_OFFHOOK://接听来电   
  39.                     writeFile(state,number);  
  40.                     break;  
  41.                 case TelephonyManager.CALL_STATE_RINGING://来电     
  42.                     incomingNumber=number;  
  43.                     writeFile(state,number);  
  44.                     break;  
  45.                 default:  
  46.                     break;  
  47.                 }                 
  48.                 super.onCallStateChanged(state, incomingNumber);  
  49.             }             
  50.         };  
  51.         //为tManager添加监听器  
  52.         tManager.listen(pListener, PhoneStateListener.LISTEN_CALL_STATE);  
  53.     }  
  54.    //将接听电话,与来电信息写入到文件  
  55.     protected void writeFile(int state, String number) {  
  56.         // TODO Auto-generated method stub  
  57.         StringBuffer sb=new StringBuffer();  
  58.         SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh.mm.ss");  
  59.         sb.append("时间:"+sdf.format(new Date())+"\n");  
  60.         switch (state) {          
  61.         case TelephonyManager.CALL_STATE_OFFHOOK://接听来电   
  62.             sb.append("接听了电话号为:"+incomingNumber+"的电话");  
  63.             break;  
  64.         case TelephonyManager.CALL_STATE_RINGING://来电     
  65.             sb.append(number+"来电");  
  66.             break;        
  67.         }  
  68.         sb.append("\n-----------------------\n");  
  69.         FileOutputStream fos=null;  
  70.         try {  
  71.             //以追加的方式打开输出流  
  72.             fos=openFileOutput("log_phone", MODE_APPEND);  
  73.               
  74.         } catch (FileNotFoundException e) {  
  75.             // TODO Auto-generated catch block  
  76.             e.printStackTrace();  
  77.         }         
  78.         //将输出流封装成PrintStream对象  
  79.         PrintStream ps=new PrintStream(fos);  
  80.         //输入文件内容  
  81.         ps.println(sb.toString());  
  82.         //关闭输出流  
  83.         ps.close();  
  84.     }  
  85. }  

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

AndroidManifest.xml


[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <!-- 授予应用读取通话状态的权限 -->  
  2.     <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  

实例分析:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值