在上一篇博客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應用程序覆蓋了