Android广播之监听应用程序安装与卸载

😄作者简介:小曾同学.com,一个致力于测试开发的博主⛽️,
如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊
座右铭:不想当开发的测试,不是一个好测试✌️。
如果感觉博主的文章还不错的话,还请点赞、收藏哦!👍

在本篇文章你将学到如何监听应用程序的安装与卸载

文章目录

  • 背景
  • 实战
    • 第一步:`创建广播接收器`
    • 第二步:`注册广播`
    • 第三步:`注销广播`

背景

为什么要监听应用的安装与卸载:主要是收集信息
为什么要收集信息:对于一些大公司来说要做一个产品。首先要做一些战略性的参考,比如说什么产品比较好以及某个产品的预测未来,就会通过安装或者卸载在用户手机中广告监听。比如说腾讯通过在QQ应用上监听应用程序卸载与安装,当时小米有一款产品叫米聊,比较火爆,然后腾讯看这款产品这么好,能不能用到自己的产品上,然后微信就产生了。

实战

注意事项:

  • 需要使用动态注册
  • 新增应用监听: "android.intent.action.PACKAGE_ADDED"
  • 卸载监听:"android.intent.action.PACKAGE_REMOVED"
  • 通过调用 addDataScheme() 方法,并传递数据方案"package"作为参数。这意味着您的 IntentFilter 将只对"package"数据方案的 Intent 感兴趣。通常,这用于声明您的广播接收器只对与应用程序安装和卸载相关的 Intent 感兴趣。

第一步:创建广播接收器

名为AppStateChangeReceiver,继承BroadcastReceiver,并重写onReceive(),我们在onReceive()方法中只获取action并打印 log,具体逻辑如下。

public class AppStateChangeReceiver extends BroadcastReceiver {
    public static final String TAG = "AppStateChangeReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action != null && action.equals(Intent.ACTION_PACKAGE_ADDED)) {
            // 应用已安装
            String packageName = intent.getData().getSchemeSpecificPart();
            Log.d(TAG,"新增了"+packageName);
        } else if (action != null && action.equals(Intent.ACTION_PACKAGE_REMOVED)) {
            // 应用已卸载
            String packageName = intent.getData().getSchemeSpecificPart();
            Log.d(TAG,"卸载了"+packageName);
        }
    }
}

第二步:注册广播

因为安装与卸载需要动态注册,所以我们在oncreate方法中注册,逻辑如下:

public class MainActivity extends AppCompatActivity {
    AppStateChangeReceiver appStateChangeReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.PACKAGE_ADDED");
        intentFilter.addAction("android.intent.action.PACKAGE_REMOVED");
        intentFilter.addDataScheme("package");
        appStateChangeReceiver = new AppStateChangeReceiver();
        registerReceiver(appStateChangeReceiver,intentFilter);
    }
    }

在动态注册广播时,一定要记住步骤:

  1. 新建一个类继承BroadcastReceiver
  2. 实现onReceive方法
  3. 在代码中实例化新建类的广播类
  4. 在代码中实例化IntentFilter
  5. 调用IntentFilter对象的addAction方法设置频道
  6. 调用registerReceiver注册广播
  7. 通过sendBroadcast发送广播
  8. 通过unregisterReceiver

第三步:注销广播

protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(appStateChangeReceiver);
    }

测试结果如下:
当设备上新增或删除应用时,都会收到打印信息。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/538831.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一个开源跨平台嵌入式USB设备协议:TinyUSB

概述 TinyUSB 是一个用于嵌入式系统的开源跨平台 USB 主机/设备堆栈,设计为内存安全,无需动态分配,线程安全,所有中断事件都被推迟,然后在非 ISR 任务函数中处理。查看在线文档以获取更多详细信息。 源码链接&#xff…

算法:双指针

算法:双指针 双指针快慢指针对撞指针总结 双指针 LeetCode 283.移动零 以上题目要求我们把所有0移动到数组的末尾,也就是说,我们要把数组转化为以下状态: [ 非0区域 ] [ 0区域 ] 像这种把一个数组划分为多个区域的题型&#xff0…

ChatGPT 会被 OpenAI 的版权诉讼摧毁吗?|TodayAI

未来人工智能是否能与人类融合成为一个引人关注的问题,但目前,ChatGPT等人工智能技术可能首先需要面对一个更紧迫的挑战:大规模的版权侵权诉讼。近期,ChatGPT因涉嫌在未经授权的情况下使用大量作者的作品进行训练,而被…

【Linux】网络基础(一)

文章目录 一、计算机网络背景1. 网络发展2. 认识“协议” 二、网络协议初识1. 协议分层2. OSI七层模型3. TCP/IP五层(或四层)模型 三、网络传输基本流程1. 同局域网的两台主机通信数据包封装和分用封装分用 2. 跨网络的两台主机通信 四、网络中的地址管理…

轻量带屏解决方案之恒玄芯片移植案例

本文章基于恒玄科技BES2600W芯片的欧智通 Multi-modal V200Z-R开发板 ,进行轻量带屏开发板的标准移植,开发了智能开关面板样例,同时实现了ace_engine_lite、arkui_ui_lite、aafwk_lite、appexecfwk_lite、HDF等部件基于OpenHarmony LiteOS-M内…

线性代数

标量、向量、张量 标量占据的是零维空间向量占据的是一维数据,例如语音信号矩阵占据的是二维数组,例如灰度图像张量占据的是三维乃至更高维的数组,例如RGB图像和视频 内积(点乘)概述 内积(inner product) 计算的则是两个向量之间的关系 两…

掌握JMeter HTTP 请求头:简单易懂

在深入研究 JMeter 的过程中,任何涉及性能测试或接口验证的专业人员都会认识到,合理配置HTTP请求头部信息是实现精确测试的关键步骤之一。不同情景下,如数据提交形式的不同(例如 JSON、XML 等),或是需要通过…

利用正射影像对斜射图像进行反向投影

在图像投影和映射领域,有两种类型的投影:正向投影和反向投影。正向投影涉及使用内部方向(即校准相机参数)将 3D 点(例如地面上的物体)投影到 2D 图像平面上。另一方面,向后投影是指根据 2D 图像确定地面物体的 3D 坐标的过程。 为了匹配倾斜图像和正射影像并确定相机位置…

Kubernetes(k8s):深入理解k8s中的亲和性(Affinity)及其在集群调度中的应用

Kubernetes(k8s):深入理解k8s中的亲和性(Affinity)及其在集群调度中的应用 1、什么是亲和性?2、节点亲和性(Node Affinity)2.1 硬性节点亲和性规则(required)…

linux 磁盘分区Inode使用率达到100%,导致网站无法创建文件报错 failed:No space leftondevice(

linux 磁盘分区Inode使用率达到100%,导致网站无法创建文件报错 failed:No space left on device 由于这问题直接导致了,网站无法正常运行! 提交工单求助阿里后,得到了答案! 工程师先让我执行 df -h 和 df -i 通过分析…

Harmony鸿蒙南向外设驱动开发-Codec

功能简介 OpenHarmony Codec HDI(Hardware Device Interface)驱动框架基于OpenMax实现了视频硬件编解码驱动,提供Codec基础能力接口给上层媒体服务调用,包括获取组件编解码能力、创建组件、参数设置、数据的轮转和控制、以及销毁…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题1

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题1 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书,赛题,解析等资料,知识点培训服务 添加博主wx:liuliu548…

【微信小程序】canvas开发笔记

【微信小程序】canvasToTempFilePath:fail fail canvas is empty 看说明书 最好是先看一下官方文档点此前往 如果是canvas 2d 写canvas: this.canvas,,如果是旧版写canvasId: ***, 解决问题 修改对应的代码,如下所示,然后再试试运行&#x…

Java 基于微信小程序的汽车4S店客户管理小程序,附源码

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

Python——详细解析目标检测xml格式标注转换为txt格式

本文简述了目标检测xml格式标注的内容&#xff0c;以及yolo系列模型所需的txt格式标注的内容。并提供了一个简单的&#xff0c;可以将xml格式标注文件转换为txt格式标注文件的python脚本。 1. xml格式文件内容 <size>标签下为图片信息&#xff0c;包括 <width> …

排序算法之选择排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性选择排序O(n^2 )O(n^2)O(n^2)O(1)In-place不稳定 稳定&#xff1a;如果A原本在B前面&#xff0c;而AB&#xff0c;排序之后A仍然在B的前面&#xff1…

RREA论文阅读

Relational Reflection Entity Alignment 关系反射实体对齐 ABSTRACT 实体对齐旨在识别来自不同知识图谱(KG)的等效实体对&#xff0c;这对于集成多源知识图谱至关重要。最近&#xff0c;随着 GNN 在实体对齐中的引入&#xff0c;近期模型的架构变得越来越复杂。我们甚至在这…

低频电磁仿真 | 新能源汽车性能提升的利器

永磁同步电机 新能源汽车的心脏 近年来&#xff0c;全球变暖的趋势日益加剧&#xff0c;极端天气事件层出不穷&#xff0c;这些现象都反映出当前气候形势的严峻性。为了应对这一全球性挑战&#xff0c;各国纷纷采取行动&#xff0c;制定了一系列降碳、减碳的措施。中国在2020年…

PostgreSQL15 + PostGis + QGIS安装教程

目录 下载1、PostgreSQL安装1.1、环境变量配置 2、PostGIS安装2.1、安装插件 3、QGIS下载3.1、安装3.2、测试 下载 PostgreSQL15安装&#xff1a;下载地址 PostGIS安装&#xff1a;下载地址&#xff08;倒数第二个&#xff09; 1、PostgreSQL安装 下载安装包之后一直点下一步…

MySQL中的SQL高级语句[二]

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法&#xff0c;看完代码自己敲一遍&#xff0c;十分有用 拖动表名到查询文件中就可以直接把名字拉进来以下是使用脚本方法&#xff0c;也可以直接进行修改中括号&#xff0c;就代表可写可不写 有些地方的代…