您的位置:首页 > 移动开发 > Android开发

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

2017-10-25 13:42 741 查看

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) && web.canGoBack()) {

  * web.goBack(); return true; } return super.onKeyDown(keyCode, event); }

  */

}

如有疑问可以留言联系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: