Mise en œuvre de la fonctionnalité de mise à jour dans l'application, à l'aide de l'extrait de code suivant:
private void showInAppUpdateDialog(boolean isMandatoryUpdate) {
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
|| appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
int appUpdateType = isMandatoryUpdate ? IMMEDIATE : AppUpdateType.FLEXIBLE;
int requestCode = isMandatoryUpdate ? REQUEST_APP_UPDATE_IMMEDIATE : REQUEST_APP_UPDATE_FLEXIBLE;
if (appUpdateInfo.isUpdateTypeAllowed(appUpdateType)) {
// start the app update
try {
appUpdateManager.startUpdateFlowForResult(appUpdateInfo, appUpdateType, targetActivity, requestCode);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
}
}).addOnFailureListener(e -> {
e.printStackTrace();
});
}
Je teste la mise à jour dans l'application sur l'appareil qui a Android 9. Pourtant, il me donne suite à une erreur (ERROR_API_NOT_AVAILABLE):
com.google.Android.play.core.install.InstallException: Install Error(-3): The API is not available on this device. (https://developer.Android.com/reference/com/google/Android/play/core/install/model/InstallErrorCode#ERROR_API_NOT_AVAILABLE)
at com.google.Android.play.core.appupdate.i.a(Unknown Source:24)
at com.google.Android.play.core.internal.o.a(Unknown Source:13)
at com.google.Android.play.core.internal.j.onTransact(Unknown Source:22)
at Android.os.Binder.execTransact(Binder.Java:731)
Cela dit, vérifiez le lien suivant: https://developer.Android.com/reference/com/google/Android/play/core/install/model/InstallErrorCode#ERROR_API_NOT_AVAILABLE )
Utilisation de la version de la bibliothèque principale de Play: 1.6.5
Dernière version de la bibliothèque principale:
implementation 'com.google.Android.play:core:1.7.0'
Cependant, je ne suis pas en mesure de comprendre pourquoi il est indiqué que ERROR_API_NOT_AVAILABLE. Toute aide serait appréciée!
Après une longue période de débogage. J'ai trouvé que c'est parce que nous testons l'application directement sur mobile. Même si nous générons et utilisons un apk signé, cette erreur se produira. Le seul moyen de se débarrasser de cette erreur est de télécharger l'application à partir de Google Play.
Nous pouvons utiliser Partage d'application interne pour tester ou simplement publier notre application.
Pour le moment, une solution temporaire consiste à entourer le OnCompleteListener
d'un:
try {...} catch(e: RuntimeExecutionException) {...}
Juste pour éviter d'avoir à vider le cache du PlayStore à chaque fois que je relance l'application