Android实现来电和去电的监听_myphonestatelistener = new phonestatelistener()-程序员宅基地

技术标签: Android  

写个实例实现Android中来电和去电的监听,来电可以使用PhoneStateListener对电话状态的改变进行监听,去电需要动态或者静态去注册广播接收器,对去电进行监听;
来电:
来电所对应的三种静态成员常量:
1、CALL_STATE_IDLE:空闲状态,没有任何活动。
2、CALL_STATE_OFFHOOK:摘机状态,至少有个电话活动。该活动或是拨打(dialing)或是通话,或是 on hold。
3、CALL_STATE_RINGING:来电状态,电话铃声响起的那段时间或正在通话又来新电,新来电话不得不等待的那段时间。

去电:
通过自定义广播接收器,监听手机发出的android.intent.action.NEW_OUTGOING_CALL的广播,然后在广播接收器中处理去电的相关逻辑。


实例代码实现:

public class PhoneListenService extends Service {
    

    private static final String tag = "PhoneListenService";

    // 电话管理者对象
    private TelephonyManager mTelephonyManager;
    // 电话状态监听者
    private MyPhoneStateListener myPhoneStateListener;
    // 动态监听去电的广播接收器
    private InnerOutCallReceiver mInnerOutCallReceiver;

    @Override
    public void onCreate() {
        mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        myPhoneStateListener = new MyPhoneStateListener();
        mTelephonyManager.listen(myPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
        // 动态注册广播接收器监听去电信息
        mInnerOutCallReceiver = new InnerOutCallReceiver();
        // 手机拨打电话时会发送:android.intent.action.NEW_OUTGOING_CALL的广播
        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);
        registerReceiver(mInnerOutCallReceiver, intentFilter);
        super.onCreate();
    }

    /**
     * 动态注册广播接收器监听去电信息
     */
    class InnerOutCallReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            // 获取播出的去电号码
            String outPhone = getResultData();
            Log.i(tag, "outPhone:" + outPhone);
        }
    }

    /**
     * 自定义内部类对来电的电话状态进行监听
     */
    class MyPhoneStateListener extends PhoneStateListener {
        // 重写电话状态改变时触发的方法
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            super.onCallStateChanged(state, incomingNumber);
            switch (state) {
                case TelephonyManager.CALL_STATE_RINGING:
                    Log.i(tag, "响铃:" + incomingNumber);
                    break;
                case TelephonyManager.CALL_STATE_OFFHOOK:
                    Log.i(tag, "接听");
                    break;
                case TelephonyManager.CALL_STATE_IDLE:
                    Log.i(tag, "挂断");
                    break;
            }
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onDestroy() {
        // 取消来电的电话状态监听服务
        if (mTelephonyManager != null && myPhoneStateListener != null) {
            mTelephonyManager.listen(myPhoneStateListener, PhoneStateListener.LISTEN_NONE);
        }
        // 取消去电的广播监听
        if (mInnerOutCallReceiver != null) {
            unregisterReceiver(mInnerOutCallReceiver);
        }
        super.onDestroy();
    }
}

权限添加:

    <!--读取电话的状态信息的权限-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--处理拨出电话,允许程序监视,修改或放弃播出电话-->
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

另外: 这里给大家提供一个AndroidManifest.xml中权限控制的在线查询工具:

Android Manifest功能与权限描述大全


测试结果如下:

这里写图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010347226/article/details/77688822

智能推荐

ajax请求接口跨域问题解决方案(控制器加header头)_response.setheader("access-control-allow-origin", -程序员宅基地

文章浏览阅读3.1k次。 response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("P3P", "CP=CAO PSA OUR._response.setheader("access-control-allow-origin", request.getheader("origin

python爬取安居客房屋价格用地图表示出来_pyqt房价地图-程序员宅基地

文章浏览阅读1.5k次,点赞4次,收藏18次。1. 房屋价格地图1.1 项目思路主要分成三个步骤首先利用python爬取安居客网站上个区的房屋价格,并把房屋所在小区进行归类,求出小区均价。然后利用百度地图api中的地理编码,我们可以获取小区所在的经纬度,注意这里不是所有小区都能准确获取的,存在一定数量的小区无法获取精确的地理坐标。最后利用BDP线上分析可以绘制出如下小区均价地图。效果如下:1.2 项目目录get_data:用于python爬取安居客房屋价格并整理get_lnglat:用于百度地图api中地理编码,获取小区的经纬_pyqt房价地图

2008年专转本计算机试卷解,2005-2008年专转本计算机真题及答案-程序员宅基地

文章浏览阅读583次。A. 在窗口中显示所有文件的属性 B. 一次打开多个文件C. 一次复制或移动多个不连续的文件 D. 一次删除多个不连续的文件 E. 不按任何键,直接拖动鼠标在不同磁盘之间移动文件 5. 关于Windows系统下的中文输入,描述正确的有。 A. 按[Ctrl+Space]组合键,不可进行中英文输入的切换 B. 按[Ctrl+Shift]组合键,可进行中文输入的切换 C..._15.windows操作系统为方便用户操作,提供了一些系统默认的组合键,如ctrl+a、ctrl+v

mysql int多长 int(1)类型的值范围是多少呢_mysqlint的取值范围 代表显示-程序员宅基地

文章浏览阅读3.1k次。int(n)中不论n指定为多少,范围都一样-2~31~2^31-1,都能插入9位数字。n只是用来控制显示而已,如果为int(4),插入一个1,显示时也会用空格补齐到4个字节请问所有mysql中的数据类型中的(n)都是表示显示位数吗?并非如此,NUMERIC(4)就限定了取值范围,超过4位就不允许写入了。因此如果你想限定数字的取值范围,最好是用NUMERIC来定义。在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255(见官方《MySQL_mysqlint的取值范围 代表显示

池州学院大一计算机基础试题,微机份问题的计算机求解_池州学院:数学分析_ppt_大学课件预览_高等教育资讯网...-程序员宅基地

文章浏览阅读163次。《数学分析》实验课第二部分微积分问题的计算机求解《数学分析》实验课前言? Newton 和 Leibnitz 创立的微积分学是很多科学科学的基础,本课程将借助MATLAB 语言的符号运算工具箱可以直接对微积分学中最常见的问题,如单变量与多变量微积分、极限、级数求和、Taylor幂级数展开,Fourier 级数展开等问题直接求解。《数学分析》实验课目录? Matlab符号工具箱简介? 极限问题? 导..._matlab 池州学院

【工控老马】详解OPC协议-工业控制和自动化领域的接口标准_opc接口-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏10次。OPC全称是OLE for Process Control,即用于过程控制的OLE,是针对现场控制系统的一个工业标准接口,是工业控制和生产自动化领域中使用的硬件和软件的接口标准。基于微软的OLE(现在的Active X)、COM (部件对象模型)和DCOM (分布式部件对象模型)技术,OPC包括自动化应用中使用的一整套接口、属性和方法的标准集,用于过程控制和制造业自动化系统。提供工业自动化系统中独立单元之间标准化的互联互通,顺应了自动化系统向开放、互操作、网络化、标准化方向发展的趋势。OPC规范OPC规_opc接口

随便推点

ucore_lab3_虚拟内存管理_lab3中实现虚存管理的过程包括()-程序员宅基地

文章浏览阅读297次。lab3:虚拟内存管理文章目录lab3:虚拟内存管理练习零:填写已有实验练习一:给未被映射的地址映射上物理页页面异常关键数据结构vma_structmm_structpage fault处理流程do_pgfault()函数回答问题练习二:补充完成基于FIFO的页面替换算法页错误异常页面换入部分页面换出部分回答问题实验结果练习零:填写已有实验本实验依赖实验1/2。请把你做的实验1/2的代码填入本实验中代码中有“LAB1”,“LAB2”的注释 相应部分lab3 依赖 lab1 和 lab2,我们需要_lab3中实现虚存管理的过程包括()

二叉树的构造、非递归遍历、查找叶子节点【Java实现】_java 树形结构找出次叶子节点-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏9次。二叉树的构造方法不一,这里根据存储结点次序的数字关系来构造父节点和孩子结点的关系(parentIndex*2+1==leftChildIndex,parentIndex*2+2==leftRightIndex),关于二叉树非递归遍历的详细介绍请看 二叉树的建立与遍历,下面程序还实现了查找叶子节点、查找某一元素是否存在的功能。import java.util.LinkedList;impor..._java 树形结构找出次叶子节点

微信小程序云开发-初学者 开通云开发、创建环境_开通云开发、创建环境,给出截图-程序员宅基地

文章浏览阅读1.8k次。微信小程序云开发文档新建云开发模板新建项目选择一个空目录,填入 AppID,勾选创建 “云开发 QuickStart 项目”,点击创建即可得到一个展示云开发基础能力的示例小程序。开通云开发、创建环境在使用云开发能力之前需要先开通云开发。在开发者工具工具栏左侧,点击 “云开发” 按钮即可打开云控制台体验小程序查看控制台以上小程序开发文档都有..._开通云开发、创建环境,给出截图

入会领京豆Python脚本_移动端领京豆脚本python-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏29次。京东入会领京豆Python脚本代码地址:<AntonVanke/JDBrandMember: 京东自动入会获取京豆 (github.com)>_移动端领京豆脚本python

页框回收算法(PFRA)——2_bypfra-程序员宅基地

文章浏览阅读455次。页框回收中的反向映射PFRA的目的之一就是能释放共享页框,为了达到这个目的Linux2.6内核能够快速定位指向同一页框的所有页表项,这个过程就叫做反向映射。反向映射简单来说就是在页描述符中加入附加字段,这样就把某个页描述符它所确定的页框对应的全部页表项联接起来,但是这样的话一旦对该链表更新会有很大的开销。所有就有一种成熟的技术出现,Linux2.6就有叫做面向对象的反向映射的技术。实际上对于任何可以回收的用户态页面,内核保留系统中该页所在所有线性区(对象)的反向链接,每个线性区描述符存放一个指针指向一个_bypfra

JS_js数据导出excel文件_js 读取 .po文件 msgstr的值为空,就把msgstr对应的msgid,导出为xlsx文件-程序员宅基地

文章浏览阅读142次。<html> <head> <div>以Table格式导为xls文件 <button onclick='TableToExcel()'>导出</button></div> <div>导出CSV文件 <button onclick='toCSV()'>导出</button></div> <div>大量数据导出CSV <button oncli_js 读取 .po文件 msgstr的值为空,就把msgstr对应的msgid,导出为xlsx文件