Archivo de tipo de entrada de la vista web de Android

Estoy tratando de construir un proyecto web usando android, desde webview. Tengo un campo de entrada de tipo de archivo <input type="file" > para permitir que el usuario cargue archivos en el servidor, pero parece que no funciona en android webview, cuando toco el botón de navegación, no pasa nada.

Comp.java

 package com.gururaju.bbmp; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.WebChromeClient; public class Comp extends Activity { WebView comp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_comp); WebView myWebView = (WebView) findViewById(R.id.comp); myWebView.setWebChromeClient(new WebChromeClient()); myWebView.loadUrl("file:///android_asset/comp.html"); } } 

Activity_comp.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/comp" > </WebView> </LinearLayout> 

Comp.html (en la carpeta de activos)

 <!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" type="text/css" href="comp.css"> <meta charset="UTF-8"> <title></title> </head> <body> <h2 align="center">Post your Complaints here</h2> <form enctype="multipart/form-data" action="" name="complaints" method="POST"> <input class="title" type="text" name="title" placeholder="Enter the Complaint Title" /><br /> <div class="spacer-welcome"></div> <textarea name="desc" class="desc" placeholder="Your complaint description here..."></textarea><br /> <div class="spacer-welcome1"></div> <input id="center" type="file" name="image" ><br /> <input class="upload" type="submit" name="submit" value="Submit" > </form> </body> </html> 

Cualquier ayuda sería apreciada.

3 Solutions collect form web for “Archivo de tipo de entrada de la vista web de Android”

La respuesta por los puntos de Riad en la dirección correcta, pero que solo callback no es suficiente para implementar.

Hay, en total, cuatro métodos de API ocultos que tiene que implementar. Su uso depende de la versión de Android. Estos métodos son:

 public void openFileChooser(ValueCallback<Uri> uploadMsg) public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) 

Puede utilizar la siguiente biblioteca que hace todas estas cosas para usted:

https://github.com/delight-im/Android-AdvancedWebView

Alternativamente, puede echar un vistazo al código fuente para ver cómo se hace:

https://github.com/delight-im/Android-AdvancedWebView/blob/master/Source/src/im/delight/android/webview/AdvancedWebView.java

La clase Webview por sí sola no admite la carga de archivos en Facebook. Necesita utilizar tanto el cliente de cromo web como el cliente de webview para manejar la carga de archivos en su aplicación Android, como se muestra a continuación. Ver más detalles y una demostración de trabajo

 package com.whatsonline.androidphotouploadonfacebook; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.content.res.Configuration; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.view.ViewGroup; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.LinearLayout; /** * Created by sada on 6/17/2016. */ public class upload extends Activity { WebView web; private ValueCallback<Uri> mUploadMessage; private final static int FILECHOOSER_RESULTCODE=1; LinearLayout ln1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.upload); web = new WebView(this); web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); ln1=(LinearLayout) findViewById(R.id.ln1); WebSettings settings=web.getSettings(); settings.setJavaScriptEnabled(true); web.loadUrl("http://www.facebook.com"); web.setWebViewClient(new myWebClient()); web.setWebChromeClient(new WebChromeClient() { //The undocumented magic method override //Eclipse will swear at you if you try to put @Override here // For Android 3.0+ public void openFileChooser(ValueCallback<Uri> uploadMsg) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); upload.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE); } // For Android 3.0+ public void openFileChooser(ValueCallback uploadMsg, String acceptType) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("*/*"); upload.this.startActivityForResult( Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE); } //For Android 4.1 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/*"); upload.this.startActivityForResult(Intent.createChooser(i, "File Chooser"), upload.FILECHOOSER_RESULTCODE); } }); ln1.addView(web); } public class myWebClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } } //flipscreen not loading again @Override public void onConfigurationChanged(Configuration newConfig){ super.onConfigurationChanged(newConfig); } @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; } } } 

Trate de implementar el método del file Chooser como este, como se menciona en el enlace del artículo proporcionado al final:

 webView.setWebChromeClient(new WebChromeClient() { // openFileChooser for Android 3.0+ public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType){ // Update message mUploadMessage = uploadMsg; try{ // do work.... }catch(Exception e){ Toast.makeText(getBaseContext(), "Exception:"+e, Toast.LENGTH_LONG).show(); } } 

Ver Detalles Aquí

  • React-Native: Descarga y carga de archivos desde android webview
  • DequeueBuffer: no se puede eliminar varios buffers sin establecer el contador de búfer
  • Appcache en Android Webview no descargar fuentes
  • SIGSEGV cargando HTML + Flash en un WebView
  • La vista Web de Android da el mensaje net :: ERR_CACHE_MISS
  • Indicador de actividad de cliente de webview android
  • Fuente personalizada para webview android
  • WebKit / WebView toque / onclick resaltado por defecto (Android Ice Cream Sandwich)
  • Android: PhoneGap vs Webview
  • Fuentes hebreas de Android 2.3 en Webview
  • Android: cómo seleccionar textos de la vista web
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.