Android监听来电和去电
时间:2022-04-23
本文章向大家介绍Android监听来电和去电,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
要监听android打电话和接电话,只需下面2步骤 1.第一步,写一个Receiver继承自BroadcastReceiver
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 public class PhoneStateBroadCastReceiver extends BroadcastReceiver
9 {
10 private static final String TAG = "PhoneStateBroadCastReceiver";
11
12 private static boolean mIncomingFlag = false;
13 private static String mIncomingNumber = null;
14
15 @Override
16 public void onReceive(Context context, Intent intent)
17 {
18 // 如果是拨打电话
19 if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL))
20 {
21 mIncomingFlag = false;
22 String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
23 Log.i(TAG, "call OUT:" + phoneNumber);
24 } else
25 {
26 // 如果是来电
27 TelephonyManager tManager =
28 (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE);
29 switch (tManager.getCallState())
30 {
31 case TelephonyManager.CALL_STATE_RINGING:
32 mIncomingNumber = intent.getStringExtra("incoming_number");
33 Log.i(TAG, "RINGING :" + mIncomingNumber);
34 break;
35 case TelephonyManager.CALL_STATE_OFFHOOK:
36 if (mIncomingFlag)
37 {
38 Log.i(TAG, "incoming ACCEPT :" + mIncomingNumber);
39 }
40 break;
41 case TelephonyManager.CALL_STATE_IDLE:
42 if (mIncomingFlag)
43 {
44 Log.i(TAG, "incoming IDLE");
45 }
46 break;
47 }
48 }
49 }
50
51 }
第二步:在AndroidManifest.xml,配置写好的Receiver,并拦截相应的BroadCastAction, 另外注意加上相应的权限
1 <receiver android:name=".broadcase.PhoneStateBroadCastReceiver">
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 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
8 <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
- Javascript 的addEventListener()及attachEvent()区别分析
- 设计模式-用接口来实现filter!梭梭就是干!
- OpenDaylight实现轮询策略的负载均衡服务
- 微服务业务开发三个难题-拆分、事务、查询(上)
- 总结了一些指针易出错的常见问题(五)
- 微服务业务开发三个难题-拆分、事务、查询(下)
- C语言之控制台读取上下左右方向键指令
- C程序之修改Windows的控制台大小
- VS2010/MFC编程(对话框:模态对话框及其弹出过程)
- 设计模式-抽象类,只是想为你做更多
- 设计模式-搞个接口,留有余地,让你我不再尴尬
- vs2010点调试,显示系统找不到指定的文件
- C++之类和对象的使用(三)
- C++之类和对象的使用(二)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 常见乱码问题分析
- 深入理解 Vue 模板渲染:Vue 模板反编译
- 彻底搞懂 etcd 系列文章(七):etcd gRPC 服务 API
- NIFI 开发注解详述
- [已解决]java请求爬取https网站报错javax.net.ssl.SSLHandshakeException的解决办法
- 面经手册 · 第7篇《ArrayList也这么多知识?一个指定位置插入就把谢飞机面晕了!》
- JsonPath实践(六)
- 自定义Processor组件
- Android开发第三讲,布局管理器
- Android 开发第四讲 TextView的基本使用
- Android 开发第五讲 学习Button了解Button属性
- Android开发第六讲EditText 编辑框
- Android 开发第七讲 RadioButton (单选按钮)
- linux内核写时复制机制源代码解读
- akka-grpc - 应用案例