1

我在 Android 上实现了应用内更新。

Todya 我发布了我的应用程序的新版本,我在 Play Console 中遇到了很多错误(今天由于这个原因导致了 +3K 错误!)。

错误是:

java.lang.IllegalArgumentException:在 androidx.fragment.app.FragmentActivity.checkForValidRequestCode (FragmentActivity.java:715) 在 androidx.fragment.app.FragmentActivity.startIntentSenderForResult (FragmentActivity.java:702) 在 com.google.android.play.core .appupdate.d.startIntentSenderForResult(未知来源:9)在 com.google.android.play.core.appupdate.b.startUpdateFlowForResult(未知来源:35)在 com.google.android.play.core.appupdate.b.startUpdateFlowForResult (未知来源:5)在 org.deiverbum.app.activities.MainActivity.lambda$checkAppUpdate$1$MainActivity (MainActivity.java:258) 在 org.deiverbum.app.activities.-$$Lambda$MainActivity$yZ2n4QRhF7BFdFURB2K2ok-2vu8。 onSuccess (Unknown Source:4) at com.google.android.play.core.tasks.e.run (Unknown Source:27) at android.os.Handler。handleCallback (Handler.java:809) at android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop (Looper.java:166) at android.app.ActivityThread.main (ActivityThread.java :7555) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:469) 在 com.android.internal.os.ZygoteInit.main 的 java.lang.reflect.Method.invoke (Native Method) (ZygoteInit.java:963)

崩溃发生在第 258 行:appUpdateManager.startUpdateFlowForResult(

这是我的更新代码MainActivity

private void checkAppUpdate() {
    appUpdateManager = AppUpdateManagerFactory.create(this);
    appUpdateManager.registerListener(installStateUpdatedListener);
    Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
    appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
        if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
            try {
                appUpdateManager.startUpdateFlowForResult(
                        appUpdateInfo,
                        AppUpdateType.FLEXIBLE,
                        this,
                        UPDATE_REQUEST_CODE);
            } catch (IntentSender.SendIntentException e) {
                e.printStackTrace();
            }
        }
    });
}

此方法从以下位置调用onCreate()

 protected void onCreate(Bundle savedInstanceState) {
     //...
     checkAppUpdate();
 }

我有这些字段MainActivty

private static final int UPDATE_REQUEST_CODE = 20200100;
private AppUpdateManager appUpdateManager;
private InstallStateUpdatedListener installStateUpdatedListener = installState -> {
    if (installState.installStatus() == InstallStatus.DOWNLOADED) {
        popupAlerter();
    }
};

我也有与应用内更新相关的代码MainActivity

@Override
protected void onDestroy() {
    unregisterListener();
    super.onDestroy();
}

@Override
protected void onResume() {
    super.onResume();
    checkNewAppVersionState();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == UPDATE_REQUEST_CODE) {
        if (resultCode != RESULT_OK) {
            Log.d(TAG, "Update flow failed! Result code: " + resultCode);

        }
    }
}

/*
  You should execute this check at all app entry points.
 */
private void checkNewAppVersionState() {
    appUpdateManager
            .getAppUpdateInfo()
            .addOnSuccessListener(new OnSuccessListener<AppUpdateInfo>() {
                @Override
                public void onSuccess(AppUpdateInfo appUpdateInfo) {
                    if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
                        popupAlerter();
                        Log.d(TAG, "checkNewAppVersionState(): resuming flexible update. Code: " + appUpdateInfo.updateAvailability());
                    }
                }
            });
}

private void popupAlerter() {
    Snackbar snackbar =
            Snackbar.make(
                    findViewById(android.R.id.content),
                    "Nueva versión descargada, por favor reinicia",
                    Snackbar.LENGTH_INDEFINITE);
    snackbar.setAction("REINICIAR", view -> appUpdateManager.completeUpdate());
    snackbar.setActionTextColor(
            getResources().getColor(R.color.colorAccent));
    snackbar.show();

}

private void unregisterListener() {
    if (appUpdateManager != null && installStateUpdatedListener != null)
        appUpdateManager.unregisterListener(installStateUpdatedListener);
}

我编写这段代码是阅读 Android 上的解释和另一个教程,但我不知道是什么导致了这些错误。

4

0 回答 0