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. log4net 使用指南,最常遇到的问题整理。。。

    一.    Log4net特征    Log4net是一个用于.NET开发环境的日志记录组件,由于它的超快及超灵活,很多大型的应用都会用到.    它有如下特点:    1.自定义日志输出级别    ...

  2. (转)为C# Windows服务添加安装程序

    本文转载自:http://kamiff.iteye.com/blog/507129 最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻 ...

  3. Monkey记录

    1.查找包名方法 方法一: sdk里面的appt 以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\apk\es3.apk 方法二: 查看data ...

  4. Java-Web 用html写一个简单的用户注册界面

    代码: <!doctype htpl> <html> <head> <meta charset="utf-8" /> <tit ...

  5. 十一、jdk命令之Jstatd命令(Java Statistics Monitoring Daemon)远程的监控工具连接到本地的JVM执行命令

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  6. java中一个简单的下载示例

    首先在tomcat服务器下的webapps的download项目下建一个doc文件夹,再建个test.doc.防止控指针异常 DownLoad.java代码 package com.down; imp ...

  7. 关于rand 与 randn

    rand:0-1均匀分布.均值m=(a+b)/2; 方差=(b-a).^2/12;   randn:0均值,方差1.     只有当rand和randn生成较大的数据时,均值和方差才会成立.比如N&g ...

  8. sql 存储过程返回值 变量名

    return 语句返回值,前台调用的参数名称为 @RETURN_VALUE

  9. 常见反编译产生错误 k__BackingField 解决办法

    常见反编译产生错误 k__BackingField 解决办法     无聊反编译小蚂蚁出现上千的错同样的错       private bool <EnableRuntimeHandler> ...

  10. oracle中bulk collect into用法

    通过bulk collect减少loop处理的开销 采用bulk collect可以将查询结果一次性地加载到collections中. 而不是通过cursor一条一条地处理. 可以在select in ...