分享

Android 监听安装和卸载

 gearss 2016-05-25

Android 应用程序的安装和卸载事件,是由系统进行监听并全局广播的,支持1.5(android 3)以上

因此,如果想要监听获取应用的安装和卸载事件,只需要自定义一个BroadcastReceiver,来对系统广播进行监听和处理


BroadcastReceiver 是系统全局广播监听类, 其主要方法是onReceive(),自定义的广播类继承于它并实现自己的onReceive()处理逻辑

BroadcastReceiver 使用前,需要进行注册监听(xml和代码两种方式),不使用时需要注销监听,其生命周期一般为整个应用的生命周期


1, 自定义广播

自定义广播MyInstalledReceiver继承自BroadcastReceiver,实现其onReceive()方式,具体代码如下:

  1. public class MyInstalledReceiver extends BroadcastReceiver {  
  2.     @Override  
  3.     public void onReceive(Context context, Intent intent) {  
  4.   
  5.         if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {     // install  
  6.             String packageName = intent.getDataString();  
  7.   
  8.             Log.i("homer", "安装了 :" + packageName);  
  9.         }  
  10.   
  11.         if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {   // uninstall  
  12.             String packageName = intent.getDataString();  
  13.   
  14.             Log.i("homer", "卸载了 :" + packageName);  
  15.         }  
  16.     }  
  17. }  


2, 注册监听

1) xml 方式

在AndroidManifest.xml 配置文件的Application节点下,添加自定义的注册监听 MyInstalledReceiver

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas./apk/res/android"  
  3.     package="com.homer.installed"  
  4.     android:versionCode="1"  
  5.     android:versionName="1.0" >  
  6.   
  7.     <application  
  8.         android:icon="@drawable/ic_launcher"  
  9.         android:label="@string/app_name" >  
  10.         <activity  
  11.             android:name=".MainActivity"  
  12.             android:label="@string/app_name" >  
  13.             <intent-filter>  
  14.                 <action android:name="android.intent.action.MAIN" />  
  15.   
  16.                 <category android:name="android.intent.category.LAUNCHER" />  
  17.             </intent-filter>  
  18.         </activity>  
  19.   
  20.         <receiver android:name=".MyInstalledReceiver" >  
  21.             <intent-filter>  
  22.                 <action android:name="android.intent.action.PACKAGE_ADDED" />  
  23.                 <action android:name="android.intent.action.PACKAGE_REMOVED" />  
  24.   
  25.                 <data android:scheme="package" />  
  26.             </intent-filter>  
  27.         </receiver>  
  28.     </application>  
  29.     <uses-sdk android:minSdkVersion="3" />  
  30. </manifest>  
在AndroidManifest.xml 添加的注册监听,其生命周期默认是整个应用的生命周期


2) 代码方式

一般在Activity的onStart()方法中注册监听,在onDestroy()方法中注销监听(也可以在onStop()方法中注销,其生命周期注销时结束)

  1. @Override  
  2. public void onStart(){  
  3.     super.onStart();  
  4.       
  5.     installedReceiver = new MyInstalledReceiver();  
  6.     IntentFilter filter = new IntentFilter();  
  7.       
  8.     filter.addAction("android.intent.action.PACKAGE_ADDED");  
  9.     filter.addAction("android.intent.action.PACKAGE_REMOVED");  
  10.     filter.addDataScheme("package");  
  11.       
  12.     this.registerReceiver(installedReceiver, filter);  
  13. }  
  14.   
  15. @Override  
  16. public void onDestroy(){  
  17.     if(installedReceiver != null) {  
  18.         this.unregisterReceiver(installedReceiver);  
  19.     }  
  20.       
  21.     super.onDestroy();  
  22. }  

以上xml和代码两种注册方式,使用时选择其一即可; 

如果同时使用两种方式,则两种方式都有效,即一次安装或卸载均统计了两次(重复统计)



3, 结果测试




源码下载



参考推荐:

Receiving package install and uninstall events

Android BroadcastReceiver(推荐)

Android Manifest.xml 结构详解

Android Intent Action 大全

intent(google)


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多