文档章节

Android] 使用广播接收器Braodcast Receiver 监听手机来电 去电 挂断的事

 等待流星
发布于 2014/03/06 11:13
字数 576
阅读 643
收藏 2

Braodcast Receiver顾名思义就是广播接收器,它和时间处理机制类似,但是事件处理机制是程序组件级别的(比如:按钮的单击事件),而广播事件处理机制是系统级别的。我们可以用Intent来启动一个组件,也可以用sendBroadcast()方法发起一个系统级别的事件广播来传递消息。我们同样可以在自己的应用程序中实现Broadcast Receiver来监听和响应广播的Intent。

事件的广播通过创建Intent对象并调用sendBroadcast()方法将广播发出。事件的接受是通过定义一个继承BroadcastReceiver的类来实现的,继承该类后覆盖其onReceive()方法,在该方法中响应事件。

public class PhoneReceiver extends BroadcastReceiver {

 
@Override
public void onReceive(Context context, Intent intent){
// TODO Auto-generated method stub

}

}



下面我们就用广播接收器实现电话状态改变时启动(来电、接听、挂断、拨打电话),但是暂时没法实现拨打电话时判断对方是否接听、转语音信箱等。Android在电话状态改变是会发送action为android.intent.action.PHONE_STATE的广播,而拨打电话时会发送action为android.intent.action.NEW_OUTGOING_CALL的广播,但是我看了下开发文档,暂时没发现有来电时的广播。知道这个就好办了,我们写个BroadcastReceiver用于接收这两个广播就可以了。

public class PhoneReceiver extends BroadcastReceiver {

         
        @Override
        public void onReceive(Context context, Intent intent){
                // TODO Auto-generated method stub
                System.out.println("action"+intent.getAction());
                if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
                        //如果是去电(拨出)
                        System.out.println("拨出");
                }else{
                        //查了下android文档,貌似没有专门用于接收来电的action,所以,非去电即来电
                        System.out.println("来电");
                        TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);   
                        tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
                        //设置一个监听器
                }
        }
        PhoneStateListener listener=new PhoneStateListener(){
 
                @Override
                public void onCallStateChanged(int state, String incomingNumber) {
                        // TODO Auto-generated method stub
                        //state 当前状态 incomingNumber,貌似没有去电的API
                        super.onCallStateChanged(state, incomingNumber);
                        switch(state){
                        case TelephonyManager.CALL_STATE_IDLE:
                                System.out.println("挂断");
                                break;
                        case TelephonyManager.CALL_STATE_OFFHOOK:
                                System.out.println("接听");
                                break;
                        case TelephonyManager.CALL_STATE_RINGING:
                                System.out.println("响铃:来电号码"+incomingNumber);
                                //输出来电号码
                                break;
                        }
                } 
        };
}


因为我们这是监听的系统事件,所以需要AndroidManifest.xml注册广播接收器:

        <receiver android:name=".PhoneReceiver">
                <intent-filter>
                        <action android:name="android.intent.action.PHONE_STATE"/>
                <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
                </intent-filter>
        </receiver>


不要忘记添加权限

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


本文转载自:http://blog.csdn.net/zhuifeng11/article/details/7579346

共有 人打赏支持
粉丝 5
博文 78
码字总数 10995
作品 0
崇明
私信 提问
Android 广播BroadCastReceiver

创建一个广播接收器的步骤: 1.创建一个类 extends BroadCastReceiver,重写onReceive()方法 2.注册广播 3.发送广播 context.sendBroadcast(new Intent("action")); // 广播的频道 注册广播的...

Coding缘
03/22
0
0
《Android深入透析》之广播(Broadcast)

概述 在android中,Broadcast作为四大组件之一,被广泛的应用在android程序之间的数据传递。举一个大家都比较熟悉的例子来说明。在车上的时候大家都有收听广播的习惯,广播电台通过发送不同频...

朵朵和糖糖
2014/11/12
0
0
Android6.0 源码修改之屏蔽系统短信功能和来电功能

一、屏蔽系统短信功能 1、屏蔽所有短信 android 4.2 短信发送流程分析可参考这篇 戳这 源码位置 vendormediatekproprietarypackagesappsMmssrccomandroidmmstransactionSmsReceiverService....

cczheng
2018/10/10
0
0
android 电话状态监听(来电和去电)实现代码

从事android开发的朋友们可能电话状态监听不是很擅长,接下来将详细介绍电话状态监听功能的实现步骤,需要了解的朋友可以参考下。 实现手机电话状态的监听,主要依靠两个类:TelephoneManger...

天王盖地虎626
01/11
0
0
Android学习之BroadcastReceiver总结

Android学习之BroadcastReceiver总结 代码下载:http://download.csdn.net/detail/nuptboyzhb/4482544 关于BroadcastReceiver的概述: ①广播接收器是一个专注于接收广播通知信息,并做出对应...

长平狐
2012/10/08
3.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

安装数据库 常见问题

数据库重置密码 如果MySQL数据库用户的密码设置过于简单,数据库在用户登录后会提示重置密码,并且不接受简单的密码。 提示需要重置密码: ERROR 1820 (HY000): You must reset your passwo...

狼王黄师傅
9分钟前
0
0
三种方式拿到反射的入口

public class a_1 { public static void main(String args[]) throws ClassNotFoundException { //三种方式拿到反射的入口 System.out.println(Class.forName("reflect.com.Son")); System.o......

南桥北木
21分钟前
1
0
Macbook 安装PhotoShop 总提示安装包损坏的问题

问题描述 今天在给Mac10.12安装Adobe Photoshop的时候一直提示Error The installation cannot continue as the installer file may be damaged. Download the installer file again.起初以为......

Carlyle_Lee
28分钟前
1
0
Java 帝国对 Python 的渗透能成功吗?哈哈

引子 Java 帝国已经成立20多年,经过历代国王的励精图治,可以说是地大物博,码农众多。 可是国王依然不满足,整天想着如何继续开拓疆土, 这一天晚上他又把几个重臣招来商议了。 IO大臣说:...

边鹏_尛爺鑫
今天
13
0
分布式事务解决方案框架(LCN)

什么是XA接口 XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口...

群星纪元
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部