2017-05-11 45 views
0

我正在使用android webview應用程序訪問網站。在提交部分有一個名爲上傳圖片的按鈕(僅向用戶顯示)。 當我嘗試從谷歌瀏覽器或我的電腦上傳圖片時,沒有任何問題,但是當我嘗試從webView應用程序中執行此操作時,並且當單擊上傳按鈕時,什麼都沒有發生。我知道我需要獲得許可,而且我已經擁有了我所需要的一切。這裏是我的代碼,但我不知道什麼是錯的,我在哪裏錯過?我會感謝你們的幫助。我無法使用android web視圖將我的圖片上傳到網站

public class SubmitProperty extends AppCompatActivity { 
private ValueCallback<Uri> mUploadMessage; 
private final static int FILECHOOSER_RESULTCODE=1; 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_submit); 
    WebView webView = (WebView) findViewById(R.id.webView); 
    webView.setWebViewClient(new myWebClient()); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.setWebChromeClient(new WebChromeClient() { 
     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/*"); 
      SubmitProperty.this.startActivityForResult(Intent.createChooser(i, "File Chooser"),FILECHOOSER_RESULTCODE); 
     } 
    }); 
    webView.getSettings().setDisplayZoomControls(true); 
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false); 
    webView.getSettings().setAllowFileAccess(true); 
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    webView.loadUrl("http://asemanhome.com/submit-property/"); 
} 
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); 
    } 
} 
@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; 
    } 
} 

} 此權限:

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-feature android:name="android.hardware.camera"/> 
<uses-permission android:name="android.permission.CAMERA"/> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

注意,我使用的是API 25和16 MINVERSION。

回答

2

我有同樣的問題,前幾天,這對我來說

添加全局變量

private ValueCallback<Uri> mUploadMessage; 
private final static int FILECHOOSER_RESULTCODE=1; 
public ValueCallback<Uri[]> uploadMessage; 

曾將此代碼添加到onCreate

webView.setWebChromeClient(new WebChromeClient(){ 

     @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 
     public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) 
     { 
      if (uploadMessage != null) { 
       uploadMessage.onReceiveValue(null); 
       uploadMessage = null; 
      } 

      uploadMessage = filePathCallback; 

      Intent intent = fileChooserParams.createIntent(); 
      try 
      { 
       startActivityForResult(intent, 100); 
      } catch (ActivityNotFoundException e) 
      { 
       uploadMessage = null; 
       Toast.makeText(getApplicationContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show(); 
       return false; 
      } 
      return true; 
     } 

超越控制onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, 
           Intent intent) { 

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
    { 
     if (requestCode == 100) 
     { 
      if (uploadMessage == null) 
       return; 
      uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent)); 
      uploadMessage = null; 
     } 
    } 
    else if (requestCode == FILECHOOSER_RESULTCODE) 
    { 
     if (null == mUploadMessage) 
      return; 

     Uri result = intent == null || resultCode != MainActivity.RESULT_OK ? null : intent.getData(); 
     mUploadMessage.onReceiveValue(result); 
     mUploadMessage = null; 
    } 
    else 
     Toast.makeText(getApplicationContext(), "Failed to Upload Image", Toast.LENGTH_LONG).show(); 
} 

注:這會爲Work的Android 5.0 +

+0

我編輯了我的代碼,就像你在第一篇文章中看到的那樣,但我仍然沒有得到任何東西。它仍然是錯的嗎? – Amin

+0

這是不同的代碼 –

+1

感謝mannnnn,你救了我的一天。它工作得很好... – Amin

0

試試這個,

private ValueCallback<Uri> mUploadMessage; 
    private final static int FILECHOOSER_RESULTCODE=1; 

    web.setWebViewClient(new myWebClient()); 
    web.setWebChromeClient(new WebChromeClient() { 
       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); 

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

     @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; 

      } 
     } 
} 
+0

我很困惑了一下,我應該在哪裏正是添加此代碼? – Amin

+0

這段代碼有太多錯誤,你可以編輯它嗎? – Amin

相關問題