Android-操作系统拨打电话广播的处理
Android操作系统的 packages/apps/phone/AndroidManifest.xml源码阅读
在之前的博客,Android-隐式意图激活操作系统通话界面,讲解了,阅读Android操作系统的 packages/apps/phone/AndroidManifest.xml,是如何暴露的

...... 等等
Android操作系统的 packages/apps/phone/OutgoingCallBroadcaster源码阅读
具体很多细节想不管,因为在 Android-隐式意图激活操作系统通话界面,已经介绍过了
现在只关心 OutgoingCallBroadcaster ,OutgoingCallBroadcaster是一个没有布局的Activity,只处理业务逻辑
OutgoingCallBroadcaster --> onCreate()
发送了有序广播,而且明确指定了 接收者
参数一:意图
参数二:谁能接收我的广播(自定义权限)
参数三:明确指定的 接收者
参数四:null
参数五:初始码
参数六:初始值(拨打的号码)
参数七:null(携带的参数)

我的应用:
在AndroidManifest.xml订阅(可以去接收者,专门接收Android操作系统拨号发出的广播)
注意:⚠️ 优先级设置了 1000,此接收者最新接收到拨打电话的信息
<!--
订阅(Xml形式订阅接收者)
订阅接收者:专门接收Android操作系统拨号发出的广播 android.intent.action.NEW_OUTGOING_CALL 这是系统应用发送的Action
-->
<receiver android:name=".br.CustomCallBroadcastReceiver"> <intent-filter android:priority="1000"> <!-- 优先级设置最大,我先接收(处理) --> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> </intent-filter> </receiver>
在AndroidManifest.xml 必须设置的权限,为什么要设置此权限呢,因为 上面Android操作系统 OutgoingCallBroadcaster 的源码中 -> 参数二:指定了此权限
<!--
参数二:谁能接收我的广播(自定义权限) 处理外拨电话的权限
-->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
设置外拨电话,在号码前面+888888
package liudeli.croadcast1.br; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; /**
* 订阅接收者:专门接收Android操作系统拨号发出的广播
* 此接收者优先级1000是最高的,最先接收,所以才有机会修改相关操作
*/
public class CustomCallBroadcastReceiver extends BroadcastReceiver { private String TAG = "CustomCallBroadcastReceiver"; @Override
public void onReceive(Context context, Intent intent) {
// 参数六:初始值(拨打的号码)
String initNumberValue = getResultData();
Log.d(TAG, "获取Android操作系统初始的值:" + initNumberValue); /**
* 设置初始值
*/
setResultData("888888" + initNumberValue);
}
}
Log:
12-17 21:48:02.491 2263-2263/liudeli.croadcast1 D/CustomCallBroadcastReceiver: 获取Android操作系统初始的值:15555
效果:

设置电话病毒,永远打不出电话
package liudeli.croadcast1.br; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; /**
* 订阅接收者:专门接收Android操作系统拨号发出的广播
* 此接收者优先级1000是最高的,最先接收,所以才有机会修改相关操作
*/
public class CustomCallBroadcastReceiver extends BroadcastReceiver { private String TAG = "CustomCallBroadcastReceiver"; @Override
public void onReceive(Context context, Intent intent) {
/**
* 无法中断广播
* 注意:⚠️ 这是无法中断广播的,因为Android操作系统拨号是使用 有序广播(指定接收者)
*/
// abortBroadcast(); /**
* 既然无法中断广播,我就把号码设置为null,就永远打不出去了
*/
setResultData(null); }
}

此接收者是最先接收到拨打电话的信息的,所以此接收者还可以做很多其他的事情
Android-操作系统拨打电话广播的处理的更多相关文章
- Android手机拨打电话的开发实例
一部手机最常用的功能就是打电话和发短信了,在Android开发中我们如何通过程序拨打电话呢?本文就给出一个用Android手机拨打电话的简单的实例. 下面是开发此实例的具体步骤: 一.新建一个Andr ...
- android 自动拨打电话 挂断电话代码
页面布局文件代码 ( res下面的layout下面的activity_main.xml代码 ) <RelativeLayout xmlns:android="http://sche ...
- Android 直接拨打电话界面
Android 拨号界面和直接拨打电话界面代码控制 //定义TAG为空 private static final String TAG = null; //定义Button的点击事件 tell.set ...
- 脚本控制向Android模拟拨打电话,发送短信,定位设置功能
做行为触发的时候要向模拟器实现拨打电话,发送短信,定位设置的的功能,可以很方便通过telnet localhost 5554实现. 写个脚本很快的搞定了.网上资料很多,脚本的很少,也所积点德啦. 写 ...
- Android 学习第11课,android 实现拨打电话的功能
1. 先布局界面,界面采用线性垂直方式来布局 在layout 界面文件中 activity_main.xml 中 <LinearLayout xmlns:android="http:/ ...
- Android APP代码拨打电话、打开手机分享功能等隐式意图
Android APP拨打电话: Intent intent=new Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+110)); start ...
- Android 打开URL中的网页和拨打电话、发送短信功能
拨打电话需要的权限 <uses-permission android:name="android.permission.CALL_PHONE"/> 为了省事界面都写一起 ...
- Android中使用Intent的Action和Data属性实现点击按钮跳转到拨打电话和发送短信
场景 点击拨打电话按钮,跳转到拨打电话页面 点击发送短信按钮,跳转到发送短信页面 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程 ...
- Android学习3—电话拨号器
本测试主要实现了一个Android的拨打电话的功能 一:界面预览 由图中可以看出,这个Activity需要3个控件:TextView.EditText.Button 其实实现一个功能要经过几个步骤: ...
随机推荐
- Esxi5-管理平台vcenter5.0_数据库迁移流程
migrating-vcenter-database-express-to-sql-2008-r2 一. 准备环境. ESXi5.0主机 IP:192.168.1.158 ...
- C#中的参数关键字params
class 参数 { public void doSome(string str,params int[] values){ ) { ; i < values.Length; i++) { Co ...
- 6.1课堂笔记—DML(数据操作语言),DQL查询语句
一.DML(数据操作语言) InnoDB MyISAM 支持事务 不支持事务 不支持全文索引 支持全文索引 支持外键约束 不支持 命令查看默认存储引擎 show variables like '%st ...
- CentOS 上使用vscode 调试百度大数据分析框架Apache Doris BE
A: 前期准备工作 1. 安装vscode,详细请参见vscode官网https://code.visualstudio.com/docs/setup/linux,摘要如下: sudo rpm --i ...
- pyCharm最新2018激活码(转)
原文地址:https://blog.csdn.net/u014044812/article/details/78727496 社区版和专业版区别: 因公司的需求,需要做一个爬取最近上映的电影.列车号. ...
- Windows 程序 dump 崩溃调试
Windows 程序捕获崩溃异常 生成dump 概述 事情的起因是,有个同事开发的程序,交付的版本程序,会偶尔随机崩溃了. 悲催的是没有输出log,也没有输出dump文件. 我建议他给程序代码加个异常 ...
- linux centos 6.1 安装 redis
1, yum install redis 检测是否有redis 2,没有的话就运行:yum install epel-release 3,再执行 yum install redis
- clientX,offsetX,screenX,pageX 区别!
先总结下区别: event.clientX.event.clientY 鼠标相对于浏览器窗口可视区域的X,Y坐标(窗口坐标),可视区域不包括工具栏和滚动条.IE事件和标准事件都定义了这2个属性 eve ...
- 为什么需要maven,maven能解决什么问题 ,maven是什么
- 【Git】二、安装配置
一.Git安装 Linux $ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev $ ap ...