android 来电状态

简介: 引用:http://blog.csdn.net/shaojie519/article/details/6764737 无论是打电话还是来电,系统广播是会发送相应的消息的,我们可以监听广播获取手机电话状态。

引用:http://blog.csdn.net/shaojie519/article/details/6764737

无论是打电话还是来电,系统广播是会发送相应的消息的,我们可以监听广播获取手机电话状态。

首先在manifest文件中配置自己的BroadcastReceiver,和声明权限。

 

[html]  view plain copy
  1. <receiver android:name=".filter.PhoneStatReceiver">    
  2.         <intent-filter>  
  3.              <action android:name="android.intent.action.PHONE_STATE"/>             
  4.              <action android:name="android.intent.action.NEW_OUTGOING_CALL" />  
  5.         </intent-filter>  
  6. </receiver>  
  7.   
  8.  <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>  
  9.  <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>  


在自己的BroadcastReceiver中做相应的处理

 

 

[java]  view plain copy
    1. import android.app.Service;  
    2. import android.content.BroadcastReceiver;  
    3. import android.content.Context;  
    4. import android.content.Intent;  
    5. import android.telephony.TelephonyManager;  
    6. import android.util.Log;  
    7.   
    8.   
    9. public class PhoneStatReceiver extends BroadcastReceiver{  
    10.           
    11.         private static final String TAG = "PhoneStatReceiver";  
    12.           
    13.         private static boolean incomingFlag = false;  
    14.           
    15.         private static String incoming_number = null;  
    16.   
    17.         @Override  
    18.         public void onReceive(Context context, Intent intent) {  
    19.                 //如果是拨打电话  
    20.                 if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){                          
    21.                         incomingFlag = false;  
    22.                         String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);          
    23.                         Log.i(TAG, "call OUT:"+phoneNumber);                          
    24.                 }else{                          
    25.                         //如果是来电  
    26.                         TelephonyManager tm =   
    27.                             (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);                          
    28.                           
    29.                         switch (tm.getCallState()) {  
    30.                         case TelephonyManager.CALL_STATE_RINGING:  
    31.                                 incomingFlag = true;//标识当前是来电  
    32.                                 incoming_number = intent.getStringExtra("incoming_number");  
    33.                                 Log.i(TAG, "RINGING :"+ incoming_number);  
    34.                                 break;  
    35.                         case TelephonyManager.CALL_STATE_OFFHOOK:  //存在至少有一个呼叫拨号,活跃,或                                                                    //保留,并没有来电振铃或等待                                
    36.                                 if(incomingFlag){  
    37.                                         Log.i(TAG, "incoming ACCEPT :"+ incoming_number);  
    38.                                 }  
    39.                                 break;  
    40.                           
    41.                         case TelephonyManager.CALL_STATE_IDLE:   //闲置状态                       
    42.                                 if(incomingFlag){  
    43.                                         Log.i(TAG, "incoming IDLE");                                  
    44.                                 }  
    45.                                 break;  
    46.                         }   
    47.                 }  
    48.         }  
    49. }  
相关文章
|
XML 前端开发 Java
Android Kotlin/Java 动态设置 shape/drawable 等状态效果
      小菜最近遇到一个小需求,程序里面有个别页面,需要动态的调整某个页面的样式,包括一键变灰等效果。       以前页面是用 shape 和 drawable 之类实现的效果。
3828 0
|
Linux Android开发
【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )
【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )
293 0
【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )
|
传感器 数据采集 编解码
【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )(二)
【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )(二)
489 0
【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )(二)
|
Android开发 数据安全/隐私保护
安卓系统home键监听及系统锁屏状态监听___Android提高篇
安卓系统home键监听及系统锁屏状态监听___Android提高篇
477 0
|
Android开发 数据安全/隐私保护
安卓系统home键监听及系统锁屏状态监听___Android提高篇
安卓系统home键监听及系统锁屏状态监听___Android提高篇
839 0
|
缓存 Android开发
【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )
【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )
141 0
|
缓存 Android开发
【Android 电量优化】电量优化 ( 充电状态获取 | 主动获取充电状态 | 广播接受者监听充电状态 | 被动获取充电状态 | 注册空广播接受者获取历史广播 )
【Android 电量优化】电量优化 ( 充电状态获取 | 主动获取充电状态 | 广播接受者监听充电状态 | 被动获取充电状态 | 注册空广播接受者获取历史广播 )
507 0
|
数据采集 传感器 编解码
【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )(一)
【Android RTMP】RTMP 直播推流阶段总结 ( 服务器端搭建 | Android 手机端编码推流 | 电脑端观看直播 | 服务器状态查看 )(一)
572 0
|
Android开发 开发者
【Android 应用开发】Activity 返回堆栈清除操作 ( 默认状态 | 清除返回堆栈配置 | 不清除返回堆栈配置 | 清除指定界面配置 )
【Android 应用开发】Activity 返回堆栈清除操作 ( 默认状态 | 清除返回堆栈配置 | 不清除返回堆栈配置 | 清除指定界面配置 )
466 0
|
XML 存储 Android开发
Android状态管理优化
目录介绍 01.界面状态有哪些 02.采用include方式管理 03.在Base类中处理逻辑 04.如何降低偶性和入侵性 05.封装低入侵性状态库 5.1 自定义帧布局 5.2 自定义状态管理器 5.
3139 0