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" />
- 将 Redis 作为图数据库
- 爬取 Stackoverflow 100 万条问答并简单分析
- Python: 早点知道这些就不会这样了
- 第一个参数:initScans(job)
- Mysql 高可用 InnoDB Cluster 多节点搭建过程
- 用MapReduce分析Hbase将结果插入mysql中
- 敲敲级简单的鉴别H图片的小程序
- processArgs方法解读
- Python分布式微博爬虫(源码分享)
- NewInstallUserMapper.class阅读笔记
- TimeUtil类所有方法
- mapreduce项目调优
- zookeeper强制关机无法启动Unable to load database on disk具体解决步骤
- Python爬淘宝——300W淘宝文胸说明了什么
- 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 文档注释
- Linux入门--权限管理、任务调度、磁盘管理
- 【Rust日报】2020-08-05 -- 如何在2020年进一步加快 Rust 编译器的速度
- Linux学习--网络、进程、服务、软件管理
- IOS label 设置行高
- 重学数据结构(序:概览)
- 【Rust日报】2020-08-06 使用 Rust 编写的 Lambdas 在 AWS IoT 和 SQS 队列之间传递消息
- react-router-config的使用
- Spring 源码解读第七弹!bean 标签的解析
- Kubeflow实战: 入门介绍与部署实践
- matplotlib基础绘图命令之violinplot
- 性能分析(3)- 短时进程导致用户 CPU 使用率过高案例
- stat 命令家族(1)- 详解 vmstat
- 性能测试必备知识(9)- 深入理解“软中断”
- Vue老项目支持Webpack打包
- 09-4 更改用户密码