Bonjour à tous,

Je rencontre un petit problème dans mon application.
J'ai actuellement des caméras de sécurités dans ma maison. N'étant pas satisfait des applications sur le play store pour raison de sécurité (communication en http au lieu de https) je me suis crée ma propre appli.

Dans l'ensemble l'appli est parfaitement fonctionnelle aujourd'hui.
Je me connecte en https à la caméra et je récupère l'image dans un webview, je gère l'allumage à distance etc.

Je suis en train de rajouter une fonction de "Photo manuelle" dans l'application.
En gros je souhaite que lorsque je clique sur un bouton spécifique, l'image renvoyé par la caméra soit stockée sur le téléphone.

Le code aujourd'hui :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    class photo extends AsyncTask<Void, Void, Void>
    {
        protected Void doInBackground(Void... arg0)
        {
            try
            {
                String url;
                if (WifiEtat == false)
                {
                    url = VideoURL_Cam1WifiOFF_PHO;
                }
                else
                {
                    url = VideoURL_Cam1WifiON_PHO;
                }
 
                DownloadManager manager = (DownloadManager) getSystemService(getApplicationContext().DOWNLOAD_SERVICE);
                Uri uri = Uri.parse(url);
                DownloadManager.Request request = new DownloadManager.Request(uri);
                request.setAllowedNetworkTypes(
                        DownloadManager.Request.NETWORK_WIFI
                                | DownloadManager.Request.NETWORK_MOBILE)
                        .setAllowedOverRoaming(true).setTitle("Photo")
                        .setDescription("Download...")
                        .setDestinationInExternalPublicDir("Download/PhotosCamera", "photo_cam.jpg");
                manager.enqueue(request);
            }
            catch (Exception e)
            {
                Log.d("Erreur photo","**********" + e.toString());
            }
            return null;
        }
        protected void onPostExecute(Void result)
        {
            return;
        }
    }

Avec par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
String VideoURL_Cam1WifiOFF_PHO = "https://user:mdp@addresse:port/dms.jpg";
Mon problème c'est que l'image ne s'enregistre pas.
Si je change la valeur de l'url pour mettre par exemple : https://www.google.fr/images/brandin...r_272x92dp.png
Le logo Google s'enregistre bien dans le répertoire.

Je pense que le problème vient du fait que la connexion à la caméra attend un paramètre malgré l'authentification dans l'url.
En effet si je tape https://user:mdp@addresse:port/dms.jpg dans mon navigateur, (pour la première fois) j'ai tout d'abord une fenêtre qui s'ouvre :
"Vous êtes sur le point de vous connecter au site .... avec le nom d’utilisateur ..."
OK / Annuler.
Si je clique sur OK le navigateur affiche l'image que je souhaite télécharger et sauvegarder.

Peut-on indiquer au DownloadManager.Request de ne pas tenir compte de ce message ou même de le valider automatiquement pour accéder à l'image ?

Mes recherches m'ont amené sur ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
        request.addRequestHeader("Authorization", "Token " + token);
        request.addRequestHeader("Accept-Language", "en-US,en;q=0.5");
        request.addRequestHeader("Content-Type", "application/json; charset=UTF-8");
        request.addRequestHeader("Accept-Encoding", "identity");
        request.addRequestHeader("User-Agent", "USER_AGENT");
Mais je ne suis pas convaincu que cela résolve mon problème.
Un petit coup de main serait le bienvenu :-)

Merci d'avance,

Evo