Bien le bonjour à toutes et à tous,

J'en appelle à vos expériences car après moult recherches, je ne parviens pas à résoudre le problème suivant :

Je développe actuellement une application sur Android 4.4 qui contient une WebView et se connecte à une URL pour afficher une appli web. Cette dernière diffuse des images et des vidéos à la chaine.
Le fonctionnement de l'application doit résister à d'éventuelles coupures réseau. Pour cela, je stocke sur la SD du périphérique Android les images et vidéos à diffuser. Puis, lorsque la WebView fait une réquête, j'intercepte celle-ci et si le fichier demandé est présent sur la SD card, je le lui donne, sinon, on passe par le serveur.

Tout fonctionne très bien avec les images. Mais pour ce qui est des vidéos, bien que le fichier soit trouvé sur la SD, la WebView passe systématiquement par le serveur et les logs annoncent ceci :
D/MediaPlayer: Couldn't open file on client side, trying server side

Je ne comprends pas la raison de ce (dis ?)fonctionnement et ne trouve rien sur le net en rapport avec ce problème.

Si vous avez des idées, je suis preneur.

Code d'interception de la requête (fonctionne très bien avec les images) :

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
39
40
41
42
 
mWebView.setWebViewClient(new WebViewClient() {
 
            public WebResourceResponse shouldInterceptRequest(WebView view, String url)
            {
                    try
                    {
                        // Construction du chemin vers le fichier local à partir de l'URL demandée
                        URL fileURL = new URL(url);
                        File root = android.os.Environment.getExternalStorageDirectory();
                        String fileName = root.getAbsolutePath() + "/monApp" + fileURL.getFile();
                        File file = new File(fileName);
 
                        //Si le fichier existe, retourne une WebResourceResponse attachée à ce fichier 
                        if(file.exists()) 
                        {
                            String type = null;
                            String extension = MimeTypeMap.getFileExtensionFromUrl(url);
 
                            if (extension != null) 
                            {
                                type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
 
                                FileInputStream fis = new FileInputStream(file);
                                WebResourceResponse response = new WebResourceResponse(type, "UTF-8", fis);  // Ici, "UTF-8" ne me semble pas adapté
                                return response;
                            }
                            return null;
                        }
                        else {
                            return null;
                        }
 
                    }   
                    catch(Exception e)
                    {
                        return null;
                    }
                }
                return null;
            }
        });
Merci d'avance pour votre aide :-)

OtO