Sto provando a caricare/fare riferimento alle immagini dalla cartella delle risorse dell'app da una pagina HTML in una WebView. A differenza della maggior parte degli esempi, la pagina HTML non si trova nella cartella delle risorse ma viene caricata da un server tramite http. Lo sfondo di questa domanda sono alcuni miglioramenti delle prestazioni che dovrebbero ridurre il tempo di caricamento (e la quantità di dati trasferiti) caricando le immagini statiche direttamente dal dispositivo. Non sono sicuro che Android abbia alcune restrizioni qui perché esiste una certa possibilità di sfruttare l'app consentendo l'accesso all'archiviazione di file locale da una pagina Web caricata da remoto.Android: come fare riferimento alle immagini degli asset da una pagina html caricata in remoto nella webview
Prima ho provato a caricare le immagini usando <img src="file:///android_asset/myimage.png">
ma questo non è riuscito (per ovvi motivi). Il mio prossimo tentativo è stato quello di utilizzare una classe ContentProvider
e immagini di riferimento usando <img src="content://com.myapp.assetcontentprovider/myimage.png">
. Questo ContentProvider è implementato come segue:
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
}
Quando si carica la pagina HTML che posso vedere nel registro di debug che openFile()
viene effettivamente attivato dal WebView e restituisce un oggetto valido ParcelFileDescriptor
ma ancora non viene visualizzata l'immagine. Non ci sono messaggi di errore mostrati nel registro che mi dicono che WebView ha rifiutato di caricare/visualizzare l'immagine. Qualche idea se e come potrebbe funzionare?
Hai trovato una risposta alla tua domanda iniziale (perché 'file: //' schema ro 'content: //' non funziona correttamente)? – Olegas