2015-01-25 16 views
5

Sto provando a creare un progetto Web utilizzando Android, da Webview. Ho un campo di input di tipo file <input type="file" > per consentire all'utente di caricare file sul server, ma sembra non funzionare su Android Webview, quando tocco il pulsante Sfoglia, non succede nulla.file di input per la visualizzazione Web per Android

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 (nella cartella Assets)

<!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> 

Qualsiasi aiuto sarebbe apprezzato.

risposta

2

La risposta di Riad punta nella giusta direzione, ma quel singolo callback è non abbastanza da implementare.

Esistono, in totale, quattro metodi API nascosti che è necessario implementare. Il loro utilizzo dipende dalla versione di Android. Questi metodi sono:

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) 

È possibile utilizzare la seguente libreria che fa tutte queste cose per voi:

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

In alternativa, si può dare un'occhiata al codice sorgente per vedere come è fatto :

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

+1

"https://github.com/delight-im/Android-AdvancedWebView" ha fatto il trucco – Nilabja

0

Prova attuazione del metodo file Chooser simili, come indicato nel link articolo previsto all'estremità:

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(); 
    } 
} 

View Details Here

+0

Ho provato questo, non sembra al lavoro! –

1

classe Webview da sola non supporta upload di file su facebook. È necessario utilizzare sia il client Web chrome che il client Webview per gestire il caricamento di file sull'applicazione Android, come mostrato di seguito. View more details and a working demo

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; 

     } 
    } 
    } 
Problemi correlati