Android 8.0 App 安装卸载流程

此文章为了验证Android 8.0 安装,卸载和更新一个应用时广播的接受状态, 主要是更新一个应用时都会接收到那些广播, 先接收到那些广播, 下面就以一个简单的例子来验证这些:

public class PackageInstallReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //接收安装广播
        if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
            String packageName = intent.getData().getSchemeSpecificPart();
            Log.e("cjl","install app packageName = "+packageName);
        }
        //接收卸载广播
        if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {
            String packageName = intent.getData().getSchemeSpecificPart();
            Log.e("cjl","uninstall app packageName = "+packageName);
            boolean isReplace = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
            Log.e("cjl","isReplace = "+isReplace);
        }
        //接收升级更新广播
        if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) {
            String packageName = intent.getData().getSchemeSpecificPart();
            Log.e("cjl","upgrade app packageName = "+packageName);
        }
    }

    public IntentFilter getIntentFilter() {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
        intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        intentFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
        intentFilter.addDataScheme("package");
        return intentFilter;
    }

    public void register(Context context) {
        context.registerReceiver(this, getIntentFilter());
    }

    public void unregister(Context context) {
        context.unregisterReceiver(this);
    }
}

新建一个广播接收器, 监听安装, 卸载和更新的广播, Android 在 8.0 之后禁止使用静态注册的方式去注册这些广播, 只能动态注册, 下面是代码:

public class MainActivity extends AppCompatActivity {
    private PackageInstallReceiver mReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mReceiver = new PackageInstallReceiver();
        mReceiver.register(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mReceiver.unregister(this);
    }
}

结果如截图所示:

这里写图片描述

安装流程

只收到安装广播

卸载广播

只收到卸载广播

更新流程:

更新的时候先收到卸载的广播, 然后收到安装的广播, 最后收到更新的广播

猜你喜欢

转载自blog.csdn.net/u010784887/article/details/79566159