让Android的webview支持H5的图片上传,无需原生开发功能

来源:互联网 发布:个人时间规划软件 编辑:程序博客网 时间:2024/05/17 09:28


Android的页面上只需要放入一个webview就可以了;


package com.vlinker.webview;

import com.vlinker.vlife.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.net.Uri;
import android.net.http.SslError;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.SslErrorHandler;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MyWb extends Activity {
 /** Called when the activity is first created. */
 WebView web;
 ProgressBar progressBar;
 private ValueCallback mUploadMessage;
 private final static int FILECHOOSER_RESULTCODE = 1;

 @Override
 protected void onActivityResult(int requestCode, int resultCode,
   Intent intent) {
  try {
   if (requestCode == FILECHOOSER_RESULTCODE) {
    if (null == mUploadMessage)
     return;
    Uri result = intent == null || resultCode != RESULT_OK ? null: intent.getData();
    if(result==null){
     mUploadMessage.onReceiveValue(null);
    }else{
     mUploadMessage.onReceiveValue(new Uri[]{result});
    }
    mUploadMessage = null;
   }
  }catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 /**
     *取消mFilePathCallback回调
     */ 
    private void cancelFilePathCallback() { 
        if (mUploadMessage != null) { 
         mUploadMessage.onReceiveValue(null); 
         mUploadMessage = null; 
        } else if (mUploadMessage != null) { 
         mUploadMessage.onReceiveValue(null); 
         mUploadMessage = null; 
        } 
    }

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

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

  web = new WebView(this);
  web.getSettings().setJavaScriptEnabled(true);
  web.loadUrl("http://uatcms.com/Sunshine/h5.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 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 showFileChooser(ValueCallback 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);
   }



   
   @SuppressLint("NewApi")
   @Override
   public boolean onShowFileChooser(WebView webView,ValueCallback<Uri[]> filePathCallback,FileChooserParams fileChooserParams) {
    // TODO Auto-generated method stub
    super.onShowFileChooser(webView, filePathCallback, fileChooserParams); 
    
    mUploadMessage = filePathCallback;
    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);
    return true;
   }
   
   @Override
   public void onProgressChanged(WebView view, int newProgress) {
    // TODO Auto-generated method stub
    if (newProgress == 100) {
                    // 网页加载完成
     Toast.makeText(MyWb.this, "加载完成", Toast.LENGTH_SHORT).show();
                } else {
                    // 加载中
                 Toast.makeText(MyWb.this, "加载中", Toast.LENGTH_SHORT).show();
                }
   }
  });

  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);
  }
  
   @Override
         public void onReceivedSslError(WebView view,
                 SslErrorHandler handler, SslError error) {
             // TODO Auto-generated method stub
             // handler.cancel();// Android默认的处理方式
             handler.proceed();// 接受所有网站的证书
             // handleMessage(Message msg);// 进行其他处理
         }

 }

 // 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) &amp;&amp; web.canGoBack()) {
  * web.goBack(); return true; } return super.onKeyDown(keyCode, event); }
  */
}


如有疑问可以留言联系。