监听应用的安装、卸载及更新

QuibblerQuibbler 2020-07-05 约 5 分钟 1917 次阅读

监听应用的安装、卸载及更新

Android的系统没有孤立的应用,一个完全与手机上其它应用毫无关系的应用很少(比如:计算器)。得益于Android应用生态圈的建设:阿里系的APP、头条系的APP等都会相互之间通过DeepLink、ContentProvider、Intent等进行关联互动。

一旦有关联就需有变数,比如手机上安装应用A,功能依赖应用B,现在B被卸载了,A需要知道。当B被重新安装上,A需要及时更新状态。当然在功能逻辑实现上可以通过判断应用是否安装、功能所依赖的应用版本是否支持等条件进行限制。

1、机制

应用安装、卸载、更新后系统会发送一条广播,分别如下:

//安装
    public static final String ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED";
    
    //卸载
    public static final String ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED";
    
    //覆盖安装
    public static final String ACTION_PACKAGE_REPLACED = "android.intent.action.PACKAGE_REPLACED";

2、监听

注册BroadcastReceiver监听上面的广播即可。广播接收器的具体用法及注意事项见《BroadcastReceiver:广播的使用》。

BroadcastReceiver receiver = new Receiver();
    
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("android.intent.action.PACKAGE_ADDED");
    intentFilter.addAction("android.intent.action.PACKAGE_REMOVED");
    intentFilter.addAction("android.intent.action.PACKAGE_REPLACED");
    //获取包名
    intentFilter.addDataScheme("package");
    
    registerReceiver(receiver, intentFilter);

在接收到应用发生变化时收到广播,在onReceiver()方法中获取应用信息:

@Override
    public void onReceive(Context context, Intent intent) {
        //只是演示,并不严谨
        String packageName = intent.getDataString();
        if (TextUtils.equals(Intent.ACTION_PACKAGE_ADDED, intent.getAction())) {
            Log.d(TAG, "监听到应用安装:" + packageName);
        }
        if (TextUtils.equals(Intent.ACTION_PACKAGE_REMOVED, intent.getAction())) {
            Log.d(TAG, "监听到应用卸载:" + packageName);
        }
        if (TextUtils.equals(Intent.ACTION_PACKAGE_REPLACED, intent.getAction())) {
            Log.d(TAG, "监听到应用更新:" + packageName);
        }
    }

getDataString()获取到的string数据格式为:

package:包名

注意:覆盖安装,我这里测试用的是-r命令:先卸载原来的,在安装新的apk,最后发送一条更新完成的广播。

adb install -r test.apk

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w