本文介绍了如何使用Android的应用内更新API?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近遇到了Google Play API提供的一种新型应用程序更新流程.我喜欢这种无缝流程来更新Android应用程序.我在Hotstar应用程序中观察了以下步骤.

I recently came across a new kind of app update flow which has provided by Google Play API. I liked this seamless flow to update an Android application. I observed the below-mentioned steps in the Hotstar app.

  1. 可以从底部弹出显示更新的卡
  2. 当我单击更新Hotstar"按钮时,弹出一个对话框(似乎是Google Play提供的对话框)
  1. 在应用运行时在后台开始下载
  2. 下载完成后,会弹出一个SnackBar,显示可以安装的应用程序
  3. 应用程序在安装后重新启动

我该如何实现?必须有一种与Google Play交流的方式.我浏览了许多博客.但是,没有找到任何解决方案.如果用户禁用了自动应用程序更新,这对于开发人员来说可能是一个很棒的功能.

How can I achieve this? There must be a way to communicate with Google Play. I went through many blogs. But, didn't find any solution. This could be an awesome feature for a developer if the auto app update is disabled by the user.

推荐答案

步骤1:添加依赖项(build.gradle(应用程序)):

dependencies {

    implementation 'com.google.android.play:core:1.7.3'
    ...
}

第2步:检查更新的可用性,并开始检查是否可用

private AppUpdateManager mAppUpdateManager;
private static final int RC_APP_UPDATE = 11;

在onStart()方法中:

In onStart() method:

mAppUpdateManager = AppUpdateManagerFactory.create(this);

mAppUpdateManager.registerListener(installStateUpdatedListener);

mAppUpdateManager.getAppUpdateInfo().addOnSuccessListener(appUpdateInfo -> {

        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE /*AppUpdateType.IMMEDIATE*/)){

            try {    
                    mAppUpdateManager.startUpdateFlowForResult(
                            appUpdateInfo, AppUpdateType.FLEXIBLE /*AppUpdateType.IMMEDIATE*/, MainActivity.this, RC_APP_UPDATE);

            } catch (IntentSender.SendIntentException e) {
                e.printStackTrace();
            }

        } else if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED){
            //CHECK THIS if AppUpdateType.FLEXIBLE, otherwise you can skip
            popupSnackbarForCompleteUpdate();
        } else {
            Log.e(TAG, "checkForAppUpdateAvailability: something else");
        }
    });

第3步:收听更新状态

InstallStateUpdatedListener installStateUpdatedListener = new 
  InstallStateUpdatedListener() {
    @Override
    public void onStateUpdate(InstallState state) {
        if (state.installStatus() == InstallStatus.DOWNLOADED){
            //CHECK THIS if AppUpdateType.FLEXIBLE, otherwise you can skip
            popupSnackbarForCompleteUpdate();
        } else if (state.installStatus() == InstallStatus.INSTALLED){
            if (mAppUpdateManager != null){
          mAppUpdateManager.unregisterListener(installStateUpdatedListener);
            }

        } else {
            Log.i(TAG, "InstallStateUpdatedListener: state: " + state.installStatus());
        }
    }
};

第4步:获取更新状态的回调

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_APP_UPDATE) {
        if (resultCode != RESULT_OK) {
            Log.e(TAG, "onActivityResult: app download failed");
        }
    }
}

第5步:灵活更新

private void popupSnackbarForCompleteUpdate() {

    Snackbar snackbar =
            Snackbar.make(
                    findViewById(R.id.coordinatorLayout_main),
                    "New app is ready!",
                    Snackbar.LENGTH_INDEFINITE);

    snackbar.setAction("Install", view -> {
        if (mAppUpdateManager != null){
            mAppUpdateManager.completeUpdate();
        }
    });

    
snackbar.setActionTextColor(getResources().getColor(R.color.install_color));
    snackbar.show();
}

第6步:别忘了注销监听器(使用onStop方法)

if (mAppUpdateManager != null) {
     mAppUpdateManager.unregisterListener(installStateUpdatedListener);
}

注意:最好在MainActivity(主页)的应用程序中的任何一项活动中添加此侦听器

要进行测试,您可以使用 FakeAppUpdateManager

https://developer. android.com/reference/com/google/android/play/core/appupdate/testing/FakeAppUpdateManager.html

约束:应用内更新仅适用于运行Android 5.0(API级别21)或更高版本的设备

Constraint: In-app update works only with devices running Android 5.0 (API level 21) or higher

官方文档: https://developer.android.com/guide/app-bundle/in-app-updates

这篇关于如何使用Android的应用内更新API?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 03:28