TelephonyManager 监听所有手机来电

要监听所有的来电,其实最重要的就是重写 TelephonyManager 的一个通话状态监听器 PhoneStateListener 然后调用 TelephonyManager.listen() 的方法进行监听

监听所有来电的步骤

  1. 取得 TelephonyManager 对象

    TelephonyManager tm = (TelephonyManager)   
        getSystemService(Context.TELEPHONY_SERVICE);
    
  2. 创建一个 电话状态监听器 ,也就创建 PhoneStateListener 的实例

    PhoneStateListener listener = new PhoneStateListener()  
    {  
        @Override  
        public void onCallStateChanged(int state, String number)  
        {  
            switch (state)  
            {  
            // 无任何状态  
                case TelephonyManager.CALL_STATE_IDLE:  
                    break;  
                case TelephonyManager.CALL_STATE_OFFHOOK:  
                    break;  
                // 来电铃响时  
                case TelephonyManager.CALL_STATE_RINGING:
    
                    // 将电话号码打印出来,你还可以保存到文件中等
                    Log.d("listen_phone", new Date() + " 来电:" + number);
    
                    break;  
                default:  
                    break;  
            }  
            super.onCallStateChanged(state, number);  
        }  
    };
    
  3. 调用 tm.listen() 方法监听电话状态改变

    tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
    

范例

我们写一个 demo 来创建来电监听器

这里用的是 Activity 而非 Service,就是说要打开这个 Activity, 才可以进行监听,通常我们的需求都是要偷偷滴在后台跑的,因为时间关系就不写 Service 的了,如果需要 可自行修改,让 Service 随开机一起启动即可

  1. 创建一个 空的 Android 项目 cn.twle.android.ListenPhone

  2. 修改 AndroidManifest.xml 添加权限

    <!-- 授予该应用读取通话状态的权限 -->  
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    
  3. 修改 MainActivity.java

    package cn.twle.android.listenphone;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.telephony.PhoneStateListener;
    import android.telephony.TelephonyManager;
    import android.util.Log;
    import java.util.Date;
    
    public class MainActivity extends Activity  
    {  
        TelephonyManager tm;
    
        @Override  
        public void onCreate(Bundle savedInstanceState)  
        {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            // 取得TelephonyManager对象  
            tm = (TelephonyManager)   
                getSystemService(Context.TELEPHONY_SERVICE);  
            // 创建一个通话状态监听器  
            PhoneStateListener listener = new PhoneStateListener()  
            {  
                @Override  
                public void onCallStateChanged(int state, String number)  
                {  
                    switch (state)  
                    {  
                    // 无任何状态  
                        case TelephonyManager.CALL_STATE_IDLE:  
                            break;  
                        case TelephonyManager.CALL_STATE_OFFHOOK:  
                            break;  
                        // 来电铃响时  
                        case TelephonyManager.CALL_STATE_RINGING:
    
                            // 将电话号码打印出来,你还可以保存到文件中等
    
                            Log.d("listen_phone", new Date() + " 来电:" + number); 
                            break;  
                        default:  
                            break;  
                    }  
                    super.onCallStateChanged(state, number);  
                }  
            };  
            // 监听电话通话状态的改变  
            tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);  
        }  
    }
    

参考文档

  1. Android TelephonyManager 官方 API

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.