在上一篇博客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-应用安装/替换/卸载/广播监听的更多相关文章

  1. 【Android】Android 监听apk安装替换卸载广播

    [Android]Android 监听apk安装替换卸载广播 首先是要获取应用的安装状态,通过广播的形式 以下是和应用程序相关的Broadcast Action ACTION_PACKAGE_ADDE ...

  2. Android 监听apk安装替换卸载广播

    首先是要获取应用的安装状态,通过广播的形式 以下是和应用程序相关的Broadcast Action ACTION_PACKAGE_ADDED 一个新应用包已经安装在设备上,数据包括包名(最新安装的包程 ...

  3. Android系统中应用的安装和卸载的监听

    一.创建一个类继承BroadcastReceiver并且复写onReceive的方法 public class AppStateReceiver extends BroadcastReceiver { ...

  4. Sdcard插拔、状态广播监听,Android文件系统,Android存储器相关知识总结

    一 SDcard广播监听,注册,取消注册的实现 (1)根据实际需要监听的事件,添加action,并注册,一般在onCreate中添加 //在IntentFilter中选择你要监听的行为 IntentF ...

  5. Android中Button的五种监听事件

    简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...

  6. oracle 11g在安装过程中出现监听程序未启动或数据库服务未注册到该监听程序

    15511477451 原文 oracle 11g在安装过程中出现监听程序未启动或数据库服务未注册到该监听程序? 环境:win7 64位系统.oracle11g数据库 问题描述:在win7 64位系统 ...

  7. DownEditTextView【自定义Edittext对Android 软键盘向下的监听】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录自定义EditText控件实现监听软键盘隐藏事件的功能.基本上和参考资料相同. 效果图    代码分析 自定义EditText子 ...

  8. Android预安装可卸载程序

    /***************************************************************************** * Android预安装可卸载程序 * 说 ...

  9. AIX下RAC搭建 Oracle10G(五)安装oracle、建立监听

    AIX下RAC搭建系列 AIX下RAC搭建 Oracle10G(五)安装oracle.建立监听 环境 节点 节点1 节点2 小机型号 IBM P-series 630 IBM P-series 630 ...

随机推荐

  1. Spring MVC、MyBatis整合文件配置详解

    Spring:http://spring.io/docs MyBatis:http://mybatis.github.io/mybatis-3/ Building a RESTful Web Serv ...

  2. php通过COM类调用组件的实现代码

    在PHP 4.2.0 至 4.2.3中,可以使用w32api_register_function 函数调用外部的DLL,前提是需要在php.ini中打开扩展的php_w32api.dll. 如果使用的 ...

  3. Spring MVC的困惑url-pattern /和/*的区别

    今天在写项目时发现一个spring 总是报org.springframework.web.servlet.DispatcherServlet noHandlerFound警告: No mapping ...

  4. 获取中文的首字母demo

    import net.sourceforge.pinyin4j.PinyinHelper; /** * * @Title: getPinYinHeadChar * @Description: TODO ...

  5. selenium+python自动化79-文件下载(SendKeys)

    前言 文件下载时候会弹出一个下载选项框,这个弹框是定位不到的,有些元素注定定位不到也没关系,就当没有鼠标,我们可以通过键盘的快捷键完成操作. SendKeys库是专业的处理键盘事件的,所以这里需要用S ...

  6. FoxPro 数据库文件及记录命令

    ADDTABLE 在当前数据库中添加一个自由表 APPEND 在表的末尾添加一个或多个新记录 APPEND FROM ARRAY 由数组添加记录到表中 APPEND FROM 从一个文件中读入记录,追 ...

  7. Maven(二)了解Maven仓库

    转载自: http://blog.csdn.net/gebitan505/article/details/46233981 在使用 Maven 之前,我们必须要了解一下 Maven 到底是怎样管理 j ...

  8. LUA表 pairs, ipairs输出顺序问题

    t = { [] = , [] = , [] = , [] = , [] = , [] = , [] = , [] = , [] = -, } t1 = { , , , , } table.sort( ...

  9. (4)activiti工作流引擎之uel表达式

    有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采购单,如何跟一个流程实例互相关联起来? 这里就需要使用到activiti启动流程实例时设置一个流程实例的busines ...

  10. Redis的强大之处

    [Redis的强大之处] 1.拥有对脚本的支持(此处是lua),脚本可选择性的缓存. 2.提供HyperLogLog计数器. 3.提供5种数据类型的全方位支持:List.Hash.Set.Ordere ...