Wie zu Lesen, die Daten in einem Blob in der WebView auf Android?
Ich haben einen server erstellt ein Objekt blob auf die browser und ich wollen laden Sie diese in WebView in Android-app. Ich habe versucht, die Umleitung der Anfrage an den browser-Instanz als auch die Verwendung der download-manager, um dies zu tun, aber keiner von Ihnen scheint zu funktionieren (obwohl, wenn ich öffnen Sie die gleiche Seite in Google Chrome, den download-Vorgang arbeitet dort).
Habe ich versucht den folgenden code,es wirft Fehler:
Android.Inhalt.ActivityNotFoundException: Keine Aktivität gefunden zu handhaben Intent { act=android.Absicht.Aktion.VIEW dat=blob:https%3A//111.111.111.111%3A8080/40b63131-63b1-4fa4-9451-c6297bbd111a"
Bearbeiten
Android.Inhalt.ActivityNotFoundException: Keine Aktivität gefunden zu handhaben Intent { act=android.Absicht.Aktion.VIEW dat=blob:http://digitalinsensu.com/0f0d6127-a0f1-44c3-af85-72f648258d6d
Code:
mWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype,long contentLength) {
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});
und dies wirft java.lang.IllegalArgumentException: Kann nur herunterladen, HTTP/HTTPS-URIs Fehler:
mWebView.setDownloadListener(new DownloadListener() {
public void onDownloadStart(String url, String userAgent,String contentDisposition, String mimetype,long contentLength) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "download");
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(request);
}
});
Wie soll ich das herunterladen der blob? Jede Hilfe würde geschätzt werden.
- Was Sie erwarten zu geschehen, statt des Absturzes?
- Warum würden Sie ein webview zum download ein Objekt? Es wird nicht wissen, wie Sie zu analysieren ist etwas anderes, als eine Webseite. Verwenden DownloadManager statt.
- Lade ich eine url in meinem webview, der einen Haufen Dinge, und erzeugt ein blob, und ich möchte den download auf das Gerät.
- Ich verstehe, dass der code nicht funktioniert, da er versucht, den Betrieb in einem blob gespeichert-browser statt einer HTTP-Adresse, aber ich habe nicht in der Lage gewesen, um herauszufinden, wie laden ein blob in Android.
- Wenn die url-Zeichenfolge wird nur "blob:" ich glaube nicht, dass es alles, was Sie tun können, mit, dass man die Daten, die Sie wollen.
- Definitiv scheint, wie Sie Ihre url ist nicht richtig. Es muss eine vollqualifizierte url
- Ich wusste nur nicht, kopieren Sie die gesamte url in es.
- Ja, scheint, wie diese Methoden funktionieren nur mit der richtigen URLs und nicht-blobs. Ich konnte nicht herausfinden, wie Zugriff auf den blob von java aber.
- Es muss eine url beginnend mit http oder https auf die Daten zugreifen. blob: ist nicht ein Protokoll zur übertragung von Daten mit.
- Es sieht aus wie es ist eine kodierte url in die blob-url. Ist es das, was du versuchst zu downloaden?
- Ich bin versucht zu laden Sie die audio-Daten der blob enthält.
- Wir erwarten das gleiche Verhalten wie Native Android
Browser
.ich.e Datei-Downloads perfekt im browser.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, sollte es möglich sein. In Ihrem Fall, so sieht die URL aus, sobald die
blob:
Präfix entfernt, und der rest-URL dekodiert:Sich bewusst sein, dass diese URL funktioniert nur, wenn der Benutzer über einen web-server laufen auf dem Gerät, das reagiert auf Anfragen, die unwahrscheinlich, dass im Fall der blob: URLs. Wenn Sie möchten, dies zu tun, müssen Sie entfernen Sie die
blob:
zuerst mit JavaString.replace(..)
oder ähnliches. Zum Dekodieren der URL, so etwas wieURLDecoder.decode(url, "UTF-8");
finden Sie hier für details.Das Problem ist, dass die
DownloadListener
wirklich ist, erwartet einen URI (ex http://server.com/file.pdf). Aber der link, den der Benutzer klickt auf nicht, passieren eine URI, die in diesem format. Die übergabe von URL repräsentiert eine blob, der an denDOM
des Browsers. Als ein Ergebnis, die Lösung wird nicht wie vorgesehen funktionieren.Können Sie eine andere option haben. Es hängt davon ab, wie Sie die Erzeugung der bytes für den blob. Sie erwähnt, dass Sie tun, dass in Javascript. Wenn ja, würde ich überspringen, mit der Blob-und
URL.createObjectURL
komplett und schreiben Sie eineJavascript/Native interface
, das Ihnen erlaubt, die übertragung der bytes in Blöcken (n Anzahl der arrays von 255 bytes, zum Beispiel), um die Java-code. Dadurch wird der Speicherverbrauch nach unten auf dem client.Ich habe eine Idee, wie man das interface, aber ich muss zuerst verstehen, wie Sie die Erzeugung der bytes für den blob. Wenn Sie buchen können, die ein byte-array kann ich weiter probieren.
Für Volle Detail auf diese Prüfung hier
Müssen Sie zum abfangen des callback für die Behandlung von url-Klicks wie diese:
In
shouldOverrideUrlLoading()
Sie tun können, Ihre Besondere Behandlung.shouldOverrideUrlLoading()
wird gar nicht aufgerufen 🙁webView.loadUrl(request.toString().substring(5));