alternative à file:// dans la webView ?
Bonjour à tous,
j'ai une servlet qui repond à une requette effectuée via la webview. Dans le code html de cette réponse, on trouve une référence à une image avec une ligne qui ressemble à ça:
Code:
1 2
|
<img id="toto" src="file:///sdcard/path/path/toto.png"/><br> |
Cependant le page html est affichée et aucune image n'apparait. Lorsque je regarde le log, je vois l'erreur suivante :
" Not allowed to load local resource: file:// ...".
En effectuant quelques recherches sur le net (site1, site2 ), j'ai vu que le mode d'accès aux fichiers locaux par le protocole file:// a été bannit pour des questions de sécurité. J'ai aussi vu qu'il faut créer son propre ContentPrivider et rédifinir la méthode openFile(android.net.Uri uri, java.lang.String mode).
J'ai fait ça et j'ai modifié mon androidManifest.xml pour déclarer ce provider.
Voila ce que j'ai fait:
Dans com.myCompany.myPackageName.LocalContentProvider:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
public class LocalContentProvider extends ContentProvider {
public ParcelFileDescriptor openFile(Uri uri, String mode) throws
FileNotFoundException {
URI fileURI = URI.create( "file://" + uri.getPath() );
File file = new File( fileURI );
ParcelFileDescriptor parcel=null;
try {
parcel = ParcelFileDescriptor.open(file,
ParcelFileDescriptor.MODE_READ_ONLY);
} catch (FileNotFoundException e) {
Log.d(LOG_TAG,"Error finding: " + fileURI + "\n" + e.toString());
}
return parcel;
} ...
} |
Dans androidManifest.xml:
Code:
1 2
|
<provider android:name="LocalContentProvider" android:authorities="com.myCompany.myPackageName" /> |
Le problème c'est que je n'arrive toujours pas à accéder aux images.
je reçois l'erreur "Failed to find provider info for com.myCompany.myPackageName" lorsque j'essaie ça:
Code:
1 2
|
<img id="toto" src="content://com.myCompany.myPackageName/sdcard/path/path/toto.png"/> |
et en réessayant avec file:// j'ai toujours la même erreur ("" Not allowed to load local resource: file:// ...").
est ce que quelqu'un aurait une idée ?
merci d'avance pour votre aide.
ps: Si j'ai mal exposé le problème, n'hésitez pas à me demander plus de détailles.