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-操作系统拨打电话广播的处理的更多相关文章

  1. Android手机拨打电话的开发实例

    一部手机最常用的功能就是打电话和发短信了,在Android开发中我们如何通过程序拨打电话呢?本文就给出一个用Android手机拨打电话的简单的实例. 下面是开发此实例的具体步骤: 一.新建一个Andr ...

  2. android 自动拨打电话 挂断电话代码

    页面布局文件代码  (  res下面的layout下面的activity_main.xml代码 ) <RelativeLayout xmlns:android="http://sche ...

  3. Android 直接拨打电话界面

    Android 拨号界面和直接拨打电话界面代码控制 //定义TAG为空 private static final String TAG = null; //定义Button的点击事件 tell.set ...

  4. 脚本控制向Android模拟拨打电话,发送短信,定位设置功能

    做行为触发的时候要向模拟器实现拨打电话,发送短信,定位设置的的功能,可以很方便通过telnet localhost  5554实现. 写个脚本很快的搞定了.网上资料很多,脚本的很少,也所积点德啦. 写 ...

  5. Android 学习第11课,android 实现拨打电话的功能

    1. 先布局界面,界面采用线性垂直方式来布局 在layout 界面文件中 activity_main.xml 中 <LinearLayout xmlns:android="http:/ ...

  6. Android APP代码拨打电话、打开手机分享功能等隐式意图

    Android APP拨打电话: Intent intent=new Intent(Intent.ACTION_DIAL,Uri.parse("tel:"+110)); start ...

  7. Android 打开URL中的网页和拨打电话、发送短信功能

    拨打电话需要的权限 <uses-permission android:name="android.permission.CALL_PHONE"/> 为了省事界面都写一起 ...

  8. Android中使用Intent的Action和Data属性实现点击按钮跳转到拨打电话和发送短信

    场景 点击拨打电话按钮,跳转到拨打电话页面 点击发送短信按钮,跳转到发送短信页面 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程 ...

  9. Android学习3—电话拨号器

    本测试主要实现了一个Android的拨打电话的功能 一:界面预览 由图中可以看出,这个Activity需要3个控件:TextView.EditText.Button 其实实现一个功能要经过几个步骤: ...

随机推荐

  1. iis 在站点中新建虚拟目录站点之后,虚拟目录中的 web.config 与 主站点中的 web.config冲突解决方案

    在虚拟目录站点中增加如下配置即可:<clear/>

  2. bin sh git@github.com no such file or directory

    window下使用git: 输入命令:git clone git @github.com:Alan0521/dotvim.git 出现/bin/sh:git@github.com no such fi ...

  3. 【洛谷】P1247 取火柴游戏(Nim)

    题目 传送门:QWQ 分析 蒟蒻根本不会博弈论..... 只知道异或和判断Nim游戏.. 不是很懂输出的选择,所以发一篇博客以待复习 代码 #include <bits/stdc++.h> ...

  4. Centos命令行窗口显示一大串前缀,777;notify;Command completed;的解决方法

    How to remove the return code from the terminal prompt In addition to the PS1 environment variable, ...

  5. 配置myslq提示 the configuration step starting server is taking longer than expected we apologize for thi

    .卸载重新安装,勾选日志配置选项,自定义日志输出路径

  6. 20165233 学习基础和C语言基础调查

    学习基础与<做中学>阅读心得 读<做中学>有感 娄老师通过在学习工作中总结出的"做中学"的方式,将其运用到减肥.五笔训练.乒乓球训练以及英文单词背诵的过程中 ...

  7. python中tornado的第一个例子

    1  先安装tornado pip install tornado 2 新建tor.py 记住不能建立 tornado.py 这样的名字  不然会报错 ImportError: No module n ...

  8. Matlab信号处理工具箱函数

    波形产生和绘图chirp 产生扫描频率余弦diric 产生Dirichlet函数或周期Sinc函数gauspuls 产生高斯调制正弦脉冲pulstran 产生脉冲串rectpuls 产生非周期矩形信号 ...

  9. Node.js究竟是什么?

    来源:https://www.ibm.com/developerworks/cn/opensource/os-nodejs/index.html?ca=drs#ibm-pcon   Node 旨在解决 ...

  10. Workgroup&Domain(Realm)

    [工作组 Work Group] 在一个网络内,可能有成百上千台电脑,如果这些电脑不进行分组,都列在“网上邻居”内,可想而知会有多么乱.为了解决这一问题,Windows 9x/NT/2000就引用了“ ...