web-dev-qa-db-fra.com

Demandes TéléchargerManager différées sous Android Pie

J'utilise les DownloadManager API pour gérer les téléchargements dans une application depuis environ 3 ans . Récemment, des utilisateurs d'Android Pie se sont plaints du fait que les téléchargements restaient parfois bloqués pendant plusieurs minutes avant de démarrer, compromettant ainsi l'UX. : certains d’entre eux ont dû réinstaller l’application pour les faire fonctionner correctement, d’autres ont eu le problème résolu avec le temps . Veuillez noter que je n’ai défini aucun paramètre spécial pour les instances DownloadManager.Request (par exemple, allowedNetworkTypes, setRequiresCharging , ...).

D'après ma compréhension du problème, les demandes restent longtemps dans l'état en attente ou en pause avant de commencer . N'a pas remarqué de modifications importantes introduites dans le SDK 28, bien qu'il soit pas important puisque je cible le niveau 27 de l'API.

Quelqu'un at-il vécu une expérience similaire et proposé des solutions de contournement? Merci

5
Matteo Innocenti

Comme mentionné dans les commentaires ci-dessus, effacer le cache et les données du gestionnaire de téléchargement résout ce problème sous Android 9 Pie. Pour effacer ces paramètres, vous devez accéder à Apps & notifications, cliquer sur l'option pour See all apps, cliquer sur le menu d'options dans le coin supérieur droit, sélectionner Show system, sélectionner Download Manager dans la liste, cliquer sur Storage, puis effacer le cache et le stockage.

Lors du dépannage de ce problème, j'ai découvert qu'en essayant d'utiliser DownloadManager pour télécharger un fichier dans un répertoire public, l'avertissement suivant était écrit dans le journal si un emplacement de téléchargement public était utilisé:

DownloadManager: Path appears to be invalid: /storage/emulated/0/Download/File Name

Cette erreur apparaît que l'application ait ou non l'autorisation de stockage. Cependant, il semble que ce soit un faux avertissement consigné par isFilenameValidInExternalPackage() ( code source ) lors de la vérification si le fichier se trouve en dehors d'un répertoire d'application et qu'il est exécuté même si l'application dispose de l'autorisation de stockage. En tant que tel, ce faux avertissement continue à apparaître même après avoir effacé le cache et le stockage de DownloadManager, bien que le téléchargement fonctionne quand même.

Edit: ce problème semble se reproduire périodiquement. En règle générale, l'arrêt forcé de Download Manager le résout temporairement. Espérons que Google publie un correctif permanent.

2
Soren Stoutner