Android

android在安装应用程序与卸载应用程序时都会发送广播,安装应用程序成功时会发送android.intent.action.PACKAGE_ADDED广播,可以通过intent.getDataString()获取安装应用的包名。当卸载应用程序成功时,系统会发送android.intent.action.PACKAGE_REMOVED广播,同样可以通过intetn.getDataString()获取应用的包名。

所以需要自定义一个BroadcastReceiver来对系统广播进行监听与处理。

1、自定义广播
自定义AppChangeTestReceiver继承自BroadcastReceiver,实现其onReceive()方式,具体代码如下。

  1. public class AppChangTestReceiver extends BroadcastReceiver{
  2. @Override
  3. public void onReceive(Context context, Intent intent) {
  4. final String action = intent.getAction();
  5. if(Intent.ACTION_PACKAGE_ADDED.equals(action)) {
  6. Log.i("AAA",">>>>>>>>>>>>>>>>>>>package added");
  7. } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
  8. Log.i("AAA",">>>>>>>>>>>>>>>>>>>package removed");
  9. }
  10. }
  11. }

2、注册监听
1)XML方式:在AndroidManifest.xml的配置文件Application节点下,注册自定义的AppChangeTestReceiver,其生命周期默认是整个应用的生命周期

  1. <?xml version="1.0" encoding="utf-8"?>
  1. <application
  2. android:allowBackup="true"
  3. android:icon="@mipmap/ic_launcher"
  4. android:label="@string/app_name"
  5. android:theme="@style/AppTheme" >
  6. <activity
  7. android:name=".HomeActivity"
  8. android:label="@string/app_name" >
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. <receiver android:name=".receiver.AppChangTestReceiver">
  15. <intent-filter>
  16. <action android:name="android.intent.action.PACKAGE_ADDED"/>
  17. <action android:name="android.intent.action.PACKAGE_REMOVED"/>
  18. <data android:scheme="package"/>
  19. </intent-filter>
  20. </receiver>
  21. </application>
  22. </manifest>

2)代码中动态注册:一般在Activity的onStart()方法中进行注册,在onStop或者在onDestroy方法中进行注销,其生命周期是Activity的生命周期。

  1. @Override
  2. protected void onStart() {
  3. super.onStart();
  4. IntentFilter intentFilter = new IntentFilter();
  5. intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
  6. intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
  7. intentFilter.addDataScheme("package");
  8. registerReceiver(mReceiver, intentFilter);
  9. }
  10. @Override
  11. protected void onDestroy() {
  12. super.onDestroy();
  13. unregisterReceiver(mReceiver);
  14. }
  15. private BroadcastReceiver mReceiver = new BroadcastReceiver() {
  16. @Override
  17. public void onReceive(Context context, Intent intent) {
  18. final String action = intent.getAction();
  19. if(Intent.ACTION_PACKAGE_ADDED.equals(action)) {
  20. Log.i("AAA","####################-------package added");
  21. } else if(Intent.ACTION_PACKAGE_REMOVED.equals(action)) {
  22. Log.i("AAA","###################----------package removed");
  23. }
  24. }
  25. };

android程序的安装与卸载的更多相关文章

  1. Android实践 -- 监听应用程序的安装、卸载

    监听应用程序的安装.卸载 在AndroidManifest.xml中注册一个静态广播,监听安装的广播 android.intent.action.PACKAGE_ADDED 监听程序卸载的广播 and ...

  2. Android程序的安装和打包

    Android程序的安装和打包

  3. Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)

    一.通过Intent消息机制发送消息,调用系统应用进行,实现apk的安装/卸载 . (1) 调用系统的安装应用,让系统自动进行apk的安装 String fileName = "/data/ ...

  4. android 实现静默安装、卸载

    方法1:[使用调用接口方法,由于安装卸载应用程序的部分API是隐藏的,所以必须下载Android系统源码,在源码下开发并编译之后使用MM命令编译生成APK文件] import java.io.File ...

  5. Android实现静默安装与卸载

    一般情况下,Android系统安装apk会出现一个安装界面,用户可以点击确定或者取消来进行apk的安装. 但在实际的项目需求中,有一种需求,就是希望apk在后台安装(不出现安装界面的提示),这种安装方 ...

  6. C# windows窗体程序打包安装及卸载

    一.新建安装部署项目

  7. Android对于静默安装和卸载

    在一般情况下,Android系统安装apk会有一个安装界面,用户可以单击确定或取消apk设备. 但在实际的项目需求中,有一种需求.就是希望apk在后台安装(不出现安装界面的提示),这样的安装方式称为静 ...

  8. android studio的安装和卸载

    安装: (待补充) 卸载: (如何彻底卸载才能达到第二次安装不受第一次安装失败的影响呢?) 1.找到安装目录,运行卸载文件.(不用清注册表,这是和卸载mysql的不同,只要把相关的文件夹,文件清楚即可 ...

  9. NIS Edit&Nsis打包程序发布(安装和卸载)

    转自:http://blog.csdn.net/signjing/article/details/7855855 注意:首选得明确自己需要打包的程序,以及程序需要的dll文件,资源文件等. 1.下载N ...

随机推荐

  1. Xcode5.1离线下载安装及使用iOS5模拟器进行开发调试的方法

    Xcode5.1默认不支持iOS5版本的模拟器开发调试,在OS X Mavericks(10.9.x)下默认只能支持iOS6.1及以上版本的模拟器,在OS X Mountain Lion(10.8.x ...

  2. android图片闪烁或帧动画

    remote_recording_transition.xml 文件 <?xml version="1.0" encoding="utf-8"?> ...

  3. 仿写thinkphp的I方法

    自己定义一个方法仿写thinkphp的I 方法 <?php function I($key="",$default='',$function="") { ...

  4. [置顶] 程序员必知(三):一分钟知道URI编码(encodeURI)

    因为浏览器会用一些特殊的字符作为特定的意义,所以在要传输的内容上如果有这些特殊的字符的话,就需要对其进行转义才能正确传输,如以下字符为发送时候的关键字,即特殊字符 ;/?:@&=+$,# 所以 ...

  5. Unity3D 导入贴图、模型等资源文件时自动设置参数

    脚本继承至AssetPostprocessor, 存放在Editor目录下! using UnityEngine; using System.Collections; using UnityEdito ...

  6. android112 c代码打印日志,c反编译调用java

    activity: package com.itheima.ccalljava; import android.os.Bundle; import android.app.Activity; impo ...

  7. 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件

    在使用Qt Designer设计窗体界面时,我们可以使用Widget Box里的窗体控件非常方便的绘制界面,比如拖进去一个按钮,一个文本编辑器等.虽然Qt Designer里的控件可以满足我们大部分的 ...

  8. Sample Ant Build File - WAR--reference

    I am using the Spring SimpleFormController example to illustrate the build process. The figure below ...

  9. Linux--------------安装vim

    1.相关提示        -bash: vim: command not found    2.查看vim是否安装        rpm -qa|grep vim            vim-en ...

  10. start mysqld on Mac server

    #!/bin/sh # Source the common setup functions for startup scripts test -r /etc/rc.common || exit 1 . ...