Je travaille sur une application Android qui se connecte à un serveur Flask local en utilisant le WiFi. Ensuite, l'application affiche des images qui sont stockées sur le serveur (RPi3). Un clic sur une image déclenche une demande de téléchargement et je veux que le DownloadManager Android mette en file d'attente la demande et télécharge l'image. Le réseau WiFi ne fournit pas d'accès à Internet.
Jusqu'à présent, j'ai pu le tester sur des appareils Android 6 et Android 8.1 et tout fonctionne bien. En testant sur plusieurs appareils Android 9, le téléchargement ne démarre pas, mais après s'être déconnecté du réseau local, les tentatives échouées sont affichées.
En lisant d'autres fils de discussion à ce sujet, j'ai essayé ce qui suit :
-
Réglage de la configuration de la sécurité du réseau comme décrit ici : Le gestionnaire de téléchargement ne fonctionne pas dans Android Pie 9.0 (Xiaomi mi A2)
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config>
Et ajouté dans le AndroidManifest.xml :
android:networkSecurityConfig="@xml/network_security_config"
-
Lier le réseau comme décrit dans la première réponse ici : Utilisation d'un WiFi sans connexion Internet
-
Jouer avec la les options offertes par la classe DownloadManager.Request mais elles ne semblent pas liées à ce problème :
.setRequiresCharging(false) .setAllowedOverMetered(false) .setAllowedOverRoaming(false) .setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, (String) url);
-
Nouvelle vérification autorisations . Ils sont activés :
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
Il s'agit de la demande de téléchargement Je crée :
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url))
.setTitle("Some Title")
.setDescription("Downloading a file")
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
.setDestinationInExternalPublicDir("some_path", (String) url)
.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);
DownloadManager downloadManager= (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
downloadID = downloadManager.enqueue(request);
Le Serveur Flask (Python3) l'utilise pour renvoyer l'image :
@app.route('/getFullImage/<image_file>')
def get_full_image(image_file):
log.debug("Client requests full image.")
folder = os.path.join(app.root_path, "media_images")
return flask.send_from_directory(directory=folder, filename=image_file, as_attachment=True)
Comme indiqué, sur Android 6 et 8.1, cela a fonctionné correctement, mais aucun des appareils Android 9 ne démarre le téléchargement. S'il existe un paramètre ou une méthode que je ne connais pas, je serais heureux de l'apprendre.
Nous vous remercions.