Android 應用程式的安裝和卸載事件,是由系統進行監聽並全域廣播的,支援1.5(android 3)以上
因此,如果想要監聽擷取應用的安裝和卸載事件,只需要自訂一個BroadcastReceiver,來對系統廣播進行監聽和處理
BroadcastReceiver 是系統全域廣播監聽類, 其主要方法是onReceive(),自訂的廣播類繼承於它並實現自己的onReceive()處理邏輯
BroadcastReceiver 使用前,需要進行註冊監聽(xml和代碼兩種方式),不使用時需要登出監聽,其生命週期一般為整個應用的生命週期
1, 自訂廣播
自訂廣播MyInstalledReceiver繼承自BroadcastReceiver,實現其onReceive()方式,具體代碼如下:
public class MyInstalledReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals("android.intent.action.PACKAGE_ADDED")) {// installString packageName = intent.getDataString();Log.i("homer", "安裝了 :" + packageName);}if (intent.getAction().equals("android.intent.action.PACKAGE_REMOVED")) {// uninstallString packageName = intent.getDataString();Log.i("homer", "卸載了 :" + packageName);}}}
2, 註冊監聽
1) xml 方式
在AndroidManifest.xml 設定檔的Application節點下,添加自訂的註冊監聽 MyInstalledReceiver
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.homer.installed" android:versionCode="1" android:versionName="1.0" > <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyInstalledReceiver" > <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package" /> </intent-filter> </receiver> </application> <uses-sdk android:minSdkVersion="3" /></manifest>
在AndroidManifest.xml 添加的註冊監聽,其生命週期預設是整個應用的生命週期
2) 代碼方式
一般在Activity的onStart()方法中註冊監聽,在onDestroy()方法中登出監聽(也可以在onStop()方法中登出,其生命週期登出時結束)
@Overridepublic void onStart(){super.onStart();installedReceiver = new MyInstalledReceiver();IntentFilter filter = new IntentFilter();filter.addAction("android.intent.action.PACKAGE_ADDED");filter.addAction("android.intent.action.PACKAGE_REMOVED");filter.addDataScheme("package");this.registerReceiver(installedReceiver, filter);}@Overridepublic void onDestroy(){if(installedReceiver != null) {this.unregisterReceiver(installedReceiver);}super.onDestroy();}
以上xml和代碼兩種註冊方式,使用時選擇其一即可;
如果同時使用兩種方式,則兩種方式都有效,即一次安裝或卸載均統計了兩次(重複統計)
3, 結果測試
源碼下載
參考推薦:
Receiving package install and uninstall events
Android BroadcastReceiver(推薦)
Android Manifest.xml 結構詳解
Android Intent Action 大全
intent(google)