静态广播接收程序安装成功,然后删除安装包

app都有自己的更新逻辑,可以看到很多应用安装完之后会提示已删除安装包,或者卸载应用后删除缓存,所以知道何时被安装,何时被卸载很重要。

实现对应用安装卸载的监听

  <receiver android:name=".InstallReceiver">
            <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>

<data android:scheme=“package”>package参数必须填写,否则接收不到信息。

public class InstallReceiver extends BroadcastReceiver {

	//downLoadFilePath 可以从SP中获取。
    public static String downLoadFilePath = "";

    @Override
    public void onReceive(Context context, Intent intent) {
        //接收安装广播
        try {
            //应用安装:第一次安装应用无法收到
            if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED) || intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED) || intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {
                String packageName = intent.getDataString();
                LogUtil.d("InstallReceiver:packageName: "+packageName);
                if (packageName != null && packageName.equals("package:"+UpdateUtil.getPackageName(context)) ){
                   File file = new File(downLoadFilePath);
                   if (file.exists()){
                       file.delete();
                   }
                }
            }else if(intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)){
              //应用卸载:
               // 应用被卸载时发出,正在被卸载的应用自身不会收到
               // public static final String ACTION_PACKAGE_FULLY_REMOVED = "android.intent.action.PACKAGE_FULLY_REMOVED";
               // 应用被完全卸载时发出(数据被删除)
         
            }else if(intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)){

              //    应用的新版本替代旧版本被安装
             //   public static final String ACTION_MY_PACKAGE_REPLACED = "android.intent.action.MY_PACKAGE_REPLACED";
             //   应用的新版本替代旧版本被安装,只发给被更新的应用自己
             //   public static final String ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED";
             //   应用被改变,譬如某些组件被disable/enable


            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

获取参数:
String packageName = intent.getDataString();
获取到的packageName 前边添加了"package: ",所以使用时需要注意。

注意:
广播接收者收到关于应用的广播,而这个广播是系统发出的,This is a protected intent that can only be sent by the system. 在以上Action中源码有注释。

一般如果已经安装了应用,安装更高版本的应用,在安装完成时会首先收到Action为Intent.ACTION_PACKAGE_REMOVED的广播,接着收到 Action== android.intent.action.PACKAGE_REPLACED的广播,相距很近。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值