前言

很多时候,我们都需要监听应用的卸载和安装并做相应的事件,比如:应用卸载后,删除安装包、清除垃圾、弹出网页;应用安装后,刷新某些事件,等等,都是非常有用的。

我这里的应用场景是在做清理app的过程中有一个软件管理,当用户卸载掉其他应用后需要弹框提示用户卸载什么app成功。

新建监听类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.cssq.clean.receiver

import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import com.google.gson.Gson
import com.hjq.toast.ToastUtils

class AppReceiver : BroadcastReceiver() {

override fun onReceive(context: Context?, intent: Intent?) {
// 接收安装广播
if (intent!!.action.equals(Intent.ACTION_PACKAGE_ADDED)) {
val packageName = intent.dataString
LogUtil.e("安装了:" + packageName + "包名的程序")
}

// 接收卸载广播
if (intent.action.equals(Intent.ACTION_PACKAGE_REMOVED)) {
val packageName = intent.dataString
// 前8位是多余的,直接截掉
LogUtil.e("卸载了:" + packageName + "包名的程序")
}
}
}

代码方式注册监听

一般在 activity 中注册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

// 应用安装卸载广播
private lateinit var receiver: AppReceiver

override fun onStart() {
receiver = AppReceiver()
val intentFilter = IntentFilter()
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED)
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED)
intentFilter.addDataScheme("package")
registerReceiver(receiver, intentFilter)
}

// 页面销毁时
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(receiver)
}

原文链接:

https://www.cnblogs.com/zhujiabin/p/5204157.html