Android Entwicklung: Dateiupload, Flash und JavaScript in einem WebView nutzen

Wenn man eine einfach Android-App mit einem Browser-Element (WebView) erstellt, kann man sehr schnell interessante Ergebnisse erhalten. Allerdings ist der Browser nicht so flexibel, wie der interne normale Browser von Android. Einige Restriktionen werden nach kurzer Zeit deutlich:

  • Dateien können nicht per HTML Form hochgeladen werden
  • Flash wird nicht unterstützt
  • JavaScript wird nicht unterstützt

Da jedoch diese Funktionen auch manchmal in Anwendungen erforderlich sind, gibt es hier ein paar Lösungsansätze:

Dateien per WebView und HTML-Form hochladen

Wenn man auf den Button “Datei auswählen…” klickt, passiert nichts. Dies lässt sich mit dem folgenden Code beheben:

[sourcecode language="java"]
//Bitte MainClass mit dem Namen eurer Klasse auswechseln!

//Importe nicht vergessen

//WebView mit dem MyWebChromeClient verknüpfen. Beispiel:
//WebView mWebView = (WebView)findViewById(R.id.webView1);
//mWebView.setWebChromeClient(new MyWebChromeClient());

private ValueCallback<Uri> mUploadMessage;
private final static int FILECHOOSER_RESULTCODE = 1;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == FILECHOOSER_RESULTCODE) {
if (null == mUploadMessage)
return;
Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData();
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
}}

final class MyWebChromeClient extends WebChromeClient {
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
MainClass.this.startActivityForResult(
Intent.createChooser(i, "Image Browser"), FILECHOOSER_RESULTCODE);
}
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
MainClass.this.startActivityForResult(
Intent.createChooser(i, "Image Browser"), FILECHOOSER_RESULTCODE);
}
public void openFileChooser(ValueCallback<Uri> uploadMsg) {
mUploadMessage = uploadMsg;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
MainClass.this.startActivityForResult(
Intent.createChooser(i, "Image Browser"), FILECHOOSER_RESULTCODE);
}}
[/sourcecode]

Flash in einem WebView aktivieren

Falls ihr Adobe Flash auf eurem Gerät installiert habt, könnt ihr auch Flash im WebView aktivieren:

[sourcecode language="java"]
//android:hardwareAccelerated="true" im Application-Tag eurer Manifest.xml eintragen

//WebView benennen: WebView mWebView = (WebView)findViewById(R.id.webView1);

mWebView.getSettings().setPluginsEnabled(true);
[/sourcecode]

JavaScript im WebView aktivieren

Falls ihr Adobe Flash auf eurem Gerät installiert habt, könnt ihr auch Flash im WebView aktivieren:

[sourcecode language="java"]
//WebView benennen: WebView mWebView = (WebView)findViewById(R.id.webView1);

mWebView.getSettings().setJavaScriptEnabled(true);

//evtl. wird von JS der Standort und / oder der Speicher benötigt:
mWebView.getSettings().setGeolocationEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
[/sourcecode]

Noch ein kleiner Tipp: Unter appmaker.merq.org lassen sich Android-Apps mit diesen Funktionen schnell und kostenlos erstellen.
Fragen, Tipps oder Erfahrungen können in die Kommentare geschrieben werden!

Das könnte interessant sein Powered by AdWol Online Werbung

Android 6 für Samsung Galaxy S6 in Vorbereitung

Laut einer noch inoffiziellen Liste bereitet Samsung nun die ersten Updates auf Android 6 Marshm...

Neuer Trend: Smartphones für Senioren

Von Seniorenhandys, das heißt sehr einfach zu bedienenden Mobiltelefonen für Senioren, haben d...

LG G2 im Angebot: 299 Euro für ein Top Smartphone

Wer auf der Suche nach einem guten Smartphone ist, kommt an dem LG G2 nicht vorbei. Das ansonsten ...