2017-04-07 34 views
0

我想基於webview做一個應用程序。到目前爲止一切正常,除了當我點擊一個文件輸入沒有任何反應。 我已經尋找互聯網上的許多解決方案,但沒有一個爲我工作,即使是這樣一個問題:File Upload in WebView 這是我的MainActivity.java代碼:如何在android studio webview中使用HTML文件輸入?

package com.myapp.myapp; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.webkit.WebChromeClient; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.ProgressBar; 

public class MainActivity extends AppCompatActivity { 
    WebView wv; 
    private ProgressBar progressBar; 
    @Override 
    public void onBackPressed(){ 
     if(wv.canGoBack()){ 
      wv.goBack(); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     wv = (WebView) findViewById(R.id.wv); 
     wv.getSettings().setJavaScriptEnabled(true); 
     wv.setFocusable(true); 
     wv.setFocusableInTouchMode(true); 
     wv.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); 
     wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
     wv.getSettings().setDomStorageEnabled(true); 
     wv.getSettings().setDatabaseEnabled(true); 
     wv.getSettings().setAppCacheEnabled(true); 
     wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
     wv.loadUrl("https://myapp.com"); 
     wv.setWebViewClient(new WebViewClient()); 

     progressBar = (ProgressBar) findViewById(R.id.progressbar); 

     wv.setWebChromeClient(new WebChromeClient(){ 
      @Override 
      public void onProgressChanged(WebView view, int progress) 
      { 
       progressBar.setProgress(0); 
       progressBar.setVisibility(View.VISIBLE); 
       MainActivity.this.setProgress(progress * 1000); 

       progressBar.incrementProgressBy(progress); 

       if(progress == 100){ 
        progressBar.setVisibility(View.GONE); 
       } 
      } 
     }); 
    } 
} 
+0

什麼錯誤?你可以發佈你的logcat嗎? –

+0

甚至這個問題[文件上傳在WebView](http://stackoverflow.com/questions/5907369/file-upload-in-webview)不起作用?你有沒有「overrided」所有版本的openFileChooser,從android 2.3+到5.0+?並且,正確處理onActivityResult? – jiashie

+0

openFileChooser是灰色的,並說:方法「openFileChooser(android.webkit.ValueCallback,java.lang.String)」從來沒有使用過。我認爲這是錯誤,但我不知道如何解決它。我是新來的。 –

回答

0

你有WebChromeClient

覆蓋 openFileChooser
 public void openFileChooser(ValueCallback<Uri> uploadFile) {  
          Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
          i.addCategory(Intent.CATEGORY_OPENABLE); 
          i.setType("*/*"); 
          startActivityForResult(Intent.createChooser(i, getString(R.string.choose_upload)), FILE_SELECTED); 
     } 

類WebChormeClient添加這個方法:

wv.setWebChromeClient(new WebChromeClient(){ 

      public void openFileChooser(ValueCallback<Uri> uploadFile) {  
          Intent i = new Intent(Intent.ACTION_GET_CONTENT); 
          i.addCategory(Intent.CATEGORY_OPENABLE); 
          i.setType("*/*"); 
          startActivityForResult(Intent.createChooser(i, getString(R.string.choose_upload)), FILE_SELECTED); 
      } 


      @Override 
      public void onProgressChanged(WebView view, int progress) 
      { 
       progressBar.setProgress(0); 
       progressBar.setVisibility(View.VISIBLE); 
       MainActivity.this.setProgress(progress * 1000); 

       progressBar.incrementProgressBy(progress); 

       if(progress == 100){ 
        progressBar.setVisibility(View.GONE); 
       } 
      } 
     }); 
+0

openFileChooser是灰色的,並說:方法「openFileChooser(android.webkit.ValueCallback,java.lang.String)」從來沒有使用 –

+0

openFileChooser是灰色的說:方法「openFileChooser(android.webkit.ValueCallback )「從未使用*** –

+0

編輯。你必須瞭解什麼是「覆蓋」。 – xiaoyuan

相關問題