Android-應用安裝/替換/卸載/廣播監聽


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM