J'essaie de charger/référencer des images depuis le dossier des ressources de l'application à partir d'une page HTML dans un WebView. Contrairement à la plupart des exemples, la page HTML elle-même ne se trouve pas dans le dossier assets mais est chargée depuis un serveur via http. Le contexte de cette question est quelques améliorations de performance qui devraient réduire le temps de chargement (et la quantité de données transférées) en chargeant des images statiques directement à partir de l'appareil. Je ne suis pas sûr si Android a quelques restrictions ici, car il existe une certaine possibilité d'exploiter l'application en permettant l'accès au stockage de fichiers local à partir d'une page Web chargée à distance.Android: Comment référencer des images d'actif à partir d'une page html chargée à distance dans Webview
J'ai d'abord essayé de charger des images en utilisant <img src="file:///android_asset/myimage.png">
mais cela a échoué (pour des raisons évidentes). Ma prochaine tentative a été d'utiliser une classe ContentProvider
et des images de référence en utilisant <img src="content://com.myapp.assetcontentprovider/myimage.png">
. Ce ContentProvider est mis en œuvre comme suit:
public class AssetContentProvider extends ContentProvider
{
private static final String URI_PREFIX = "content://com.myapp.assetcontentprovider";
public static String constructUri(String url) {
Uri uri = Uri.parse(url);
return uri.isAbsolute() ? url : URI_PREFIX + url;
}
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
Log.d("AssetContentProvider", uri.getPath());
try {
return getContext().getAssets().openFd(uri.getPath().substring(1)).getParcelFileDescriptor();
} catch (IOException e) {
Log.d("AssetContentProvider", "IOException for " + uri.getPath());
throw new FileNotFoundException();
}
}
// more methods irrelevant for this post
}
Lors du chargement de la page HTML que je peux voir dans le journal de débogage qui openFile()
est effectivement déclenchée de la WebView et retourne un objet ParcelFileDescriptor
valide, mais encore l'image n'apparaît pas. Il n'y a aucun message d'erreur montré dans le journal qui indiquerait que WebView a refusé de charger/afficher l'image. Des idées si et comment cela pourrait fonctionner?
Avez-vous trouvé une réponse à votre question initiale (pourquoi 'file: //' scheme ro 'content: //' on ne fonctionne pas correctement)? – Olegas