Android应用程序 - webview无法打开文件上传

时间:2017-06-03 19:09:16

标签: android

我创建了一个加载/打开网站的Android应用(在Android Studio上)。浏览器上的一切都还可以,但在应用程序上,图片上传不会打开手机的照片,这样我就可以选择要上传的图片了 - 如何解决这个问题?



package com.example.opex.shoutout;

import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {


    WebView webView;
    ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = (WebView) findViewById(R.id.webView);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);

        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new MainActivity.myWebClient());


        webView.loadUrl("http://rms.irsglobal.net/mobile/");


        webView.setWebViewClient(new WebViewClient(){
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                String url2="http://rms.irsglobal.net/mobile/";
                // all links  with in ur site will be open inside the webview
                //links that start ur domain example(http://www.example.com/)
                if (url != null && url.startsWith(url2)){
                    return false;
                }
                // all links that points outside the site will be open in a normal android browser
                else  {
                    view.getContext().startActivity(
                            new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                    return true;
                }
            }
        });



    }


    public class myWebClient extends WebViewClient
    {
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            progressBar.setVisibility(View.GONE);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }
        

        /*@Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            return super.shouldOverrideUrlLoading(view, request);
        }*/
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if(keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()){
            webView.goBack();
        }
        return super.onKeyDown(keyCode, event);
    }
}




1 个答案:

答案 0 :(得分:1)

完整的工作代码:)

public class MyWb extends Activity {
/** Called when the activity is first created. */ 

WebView web;
ProgressBar progressBar;

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

@Override 
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    web = (WebView) findViewById(R.id.webview01);
    progressBar = (ProgressBar) findViewById(R.id.progressBar1);

    web = new WebView(this);  
    web.getSettings().setJavaScriptEnabled(true);
    web.loadUrl("http://www.script-tutorials.com/demos/199/index.html");
    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/*");  
            MyWb.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("*/*");
           MyWb.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/*");  
               MyWb.this.startActivityForResult( Intent.createChooser( i, "File Chooser" ), MyWb.FILECHOOSER_RESULTCODE );

           } 

    });   


    setContentView(web);  


} 

public class myWebClient extends WebViewClient
{ 
    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub 
        super.onPageStarted(view, url, favicon);
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub 

        view.loadUrl(url);
        return true; 

    } 

    @Override 
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub 
        super.onPageFinished(view, url);

        progressBar.setVisibility(View.GONE);
    } 
} 

//flipscreen not loading again 
@Override 
public void onConfigurationChanged(Configuration newConfig){         
    super.onConfigurationChanged(newConfig); 
} 

// To handle "Back" key press event for WebView to go back to previous screen. 
/*@Override 
public boolean onKeyDown(int keyCode, KeyEvent event)  
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) { 
        web.goBack(); 
        return true; 
    } 
    return super.onKeyDown(keyCode, event); 
}*/ 
}