Android-应用安装/替换/卸载/广播监听
在上一篇博客Android-开关机的广播,中介绍了,如何订阅接收者,去接收系统发送的开机/关机广播, 而这篇博客是订阅接收者 去接收应用的(安装/替换/卸载) 三种广播
订阅 接收者 去接收 应用的 (安装/替换/卸载) 三种广播,只能监听到其他应用,不能监听自己
使用场景:
例如:手机有卫士应用,当你安装一个应用,手机卫士就提醒:需要扫描病毒吗, 当你卸载一个应用,手机卫士就提醒:需要清理垃圾缓存吗,手机卫士是怎么知道的呢
因为手机卫士也是,订阅了一个接收者,当应用被(安装/替换/卸载)系统会自动发出广播,接收者只需监听系统发过来的广播即可
在Android系统里面一个应用就是一个包package
在AndroidManifest.xml订阅接收者
<!--
订阅(Xml形式订阅接收者)
订阅接收者:专门去接收Android系统发出的(安装/替换/卸载)广播
应用:和package 有关,所以需要PACKAGE_XXX
-->
<receiver android:name=".br.InstallUninstallBroadcastReceiver"> <intent-filter> <!-- 应用安装了 -->
<action android:name="android.intent.action.PACKAGE_ADDED" /> <!-- 应用卸载了 -->
<action android:name="android.intent.action.PACKAGE_REMOVED" /> <!-- 应用被覆盖了 -->
<action android:name="android.intent.action.PACKAGE_REPLACED" /> <!-- 系统就是这样发送的,所以必须这样订阅 -->
<data android:scheme="package" /> </intent-filter> </receiver>
接收者:
package liudeli.croadcast1.br; import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log; /**
* (安装/替换/卸载)接收者,可以接收三个广播
* 当其他应用被(安装/替换/卸载)后,Android操作系统会自动检测到,系统会自动的发出以下三种广播
* 1安装
* 2替换
* 3卸载
*/
public class InstallUninstallBroadcastReceiver extends BroadcastReceiver { private final String TAG = InstallUninstallBroadcastReceiver.class.getSimpleName(); @Override
public void onReceive(Context context, Intent intent) { /**
* 获取(安装/替换/卸载)应用的 信息
*/
String packages = intent.getDataString();
packages = packages.split(":")[1]; String action = intent.getAction();
if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {
Log.d(TAG, packages + "应用程序安装了,需要进行该应用安全扫描吗");
} else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
Log.d(TAG, packages + "应用程序卸载了,需要清理垃圾有缓存吗");
} else if (Intent.ACTION_PACKAGE_REPLACED.equals(action)) {
Log.d(TAG, packages + "应用程序覆盖了");
}
}
}
测试后的Log日志:
12-18 02:06:53.749 3996-3996/liudeli.croadcast1 D/InstallUninstallBroadcastReceiver: test.liudeli.mytestproject1应用程序卸载了,需要清理垃圾有缓存吗
12-18 02:07:05.070 3996-3996/liudeli.croadcast1 D/InstallUninstallBroadcastReceiver: test.liudeli.mytestproject1应用程序安装了,需要进行该应用安全扫描吗
12-18 02:07:49.788 3996-3996/liudeli.croadcast1 D/InstallUninstallBroadcastReceiver: test.liudeli.mytestproject1应用程序覆盖了
Android-应用安装/替换/卸载/广播监听的更多相关文章
- 【Android】Android 监听apk安装替换卸载广播
[Android]Android 监听apk安装替换卸载广播 首先是要获取应用的安装状态,通过广播的形式 以下是和应用程序相关的Broadcast Action ACTION_PACKAGE_ADDE ...
- Android 监听apk安装替换卸载广播
首先是要获取应用的安装状态,通过广播的形式 以下是和应用程序相关的Broadcast Action ACTION_PACKAGE_ADDED 一个新应用包已经安装在设备上,数据包括包名(最新安装的包程 ...
- Android系统中应用的安装和卸载的监听
一.创建一个类继承BroadcastReceiver并且复写onReceive的方法 public class AppStateReceiver extends BroadcastReceiver { ...
- Sdcard插拔、状态广播监听,Android文件系统,Android存储器相关知识总结
一 SDcard广播监听,注册,取消注册的实现 (1)根据实际需要监听的事件,添加action,并注册,一般在onCreate中添加 //在IntentFilter中选择你要监听的行为 IntentF ...
- Android中Button的五种监听事件
简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...
- oracle 11g在安装过程中出现监听程序未启动或数据库服务未注册到该监听程序
15511477451 原文 oracle 11g在安装过程中出现监听程序未启动或数据库服务未注册到该监听程序? 环境:win7 64位系统.oracle11g数据库 问题描述:在win7 64位系统 ...
- DownEditTextView【自定义Edittext对Android 软键盘向下的监听】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录自定义EditText控件实现监听软键盘隐藏事件的功能.基本上和参考资料相同. 效果图 代码分析 自定义EditText子 ...
- Android预安装可卸载程序
/***************************************************************************** * Android预安装可卸载程序 * 说 ...
- AIX下RAC搭建 Oracle10G(五)安装oracle、建立监听
AIX下RAC搭建系列 AIX下RAC搭建 Oracle10G(五)安装oracle.建立监听 环境 节点 节点1 节点2 小机型号 IBM P-series 630 IBM P-series 630 ...
随机推荐
- Netty私有协议栈 读书笔记
1.数据结构定义 1)netty消息:NettyMessage package com.cherry.netty.demo.protocolstack.pojo; import com.cherry. ...
- RDLC报表系列二
---------------------ReportServer数据库权限表说明------------------ --用户表 select * from Users --角色表 select * ...
- bzoj 4885: [Lydsy2017年5月月赛]长方体
Description 给定一个a*b*c的长方体,定义其表面上两个点的距离为沿着长方体的表面走的最短路径的长度,请找到距离最远的点对,你需要保证找到的两个点里至少有一个是长方体顶点. Input 第 ...
- HDU 4762 Cut the Cake(高精度)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Bootstrap-CL:页面标题
ylbtech-Bootstrap-CL:页面标题 1.返回顶部 1. Bootstrap 页面标题(Page Header) 页面标题(Page Header)是个不错的功能,它会在网页标题四周添加 ...
- linux下今天遇到的问题
之前由于测试需要,必须用mysql5.7的客户端, 现在由于产品完善,开始支持5.6,所以需要装5.6的客户端做测试,考虑到手工测试的效率及不可重复性,准备自动化执行原来的用例. 老的用例是用MySQ ...
- 基于Redis实现简单的分布式锁
在分布式场景下,有很多种情况都需要实现最终一致性.在设计远程上下文的领域事件的时候,为了保证最终一致性,在通过领域事件进行通讯的方式中,可以共享存储(领域模型和消息的持久化数据源),或者做全局XA ...
- jquery 等html加载完成再绑定事件
$(document).on("click","selector",function(){ //code});
- Unity3D的坑系列:动态加载dll
我现在参与的项目是做MMO手游,目标平台是Android和iOS,iOS平台不能动态加载dll(什么原因找乔布斯去),可以直接忽略,而在Android平台是可以动态加载dll的,有了这个就可以实现代码 ...
- Java遍历一个目录下的所有文件
Java遍历一个目录下的所有文件 Java工具中为我们提供了一个用于管理文件系统的类,这个类就是File类,File类与其他流类不同的是,流类关心的是文件的内容,而File类关心的是磁盘上文件的存 ...