全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android webview打开本地图片上传实现代码

Webview打开本地图片选择器十分之麻烦,其在安卓系统3x 4x 5x上的行为都不同,处理也不同,所以之前差点崩溃。经过测试和完善,最终其在各个版本上都能完美工作。

直接上代码

package com.testandroid.webview;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.JsResult;
import android.webkit.ValueCallback;
import android.webkit.WebBackForwardList;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;

import com.testandroid.R;

public class WebViewActivity extends AppCompatActivity { 

  private final String TAG = WebViewActivity.class.getSimpleName();

  private Button button;
  private WebView webView;

  private String recgPic = "http://m.shitu.chinaso.com/mx/index.html";

  public final static int FILECHOOSER_RESULTCODE = 1;
  public final static int FILECHOOSER_RESULTCODE_FOR_ANDROID_5 = 2;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view);

    button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      }
    });

    initTestWebView();

  }

  private void initTestWebView() {
    webView = (WebView) findViewById(R.id.tempWebView);

    WiewSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);

    webView.setWebChromeClient(new WebChromeClient() {
      @Override
      public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
        AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
        builder.setTitle("xxx提示").setMessage(message).setPositiveButton("确定", null);
        builder.setCancelable(false);
        builder.setIcon(R.mipmap.ic_launcher);
        AlertDialog dialog = builder.create();
        dialog.show();
        result.confirm();
        return true;
      }

      //扩展浏览器上传文件
      //3.0++版本
      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
        openFileChooserImpl(uploadMsg);
      }

      //3.0--版本
      public void openFileChooser(ValueCallback<Uri> uploadMsg) {
        openFileChooserImpl(uploadMsg);
      }

      public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
        openFileChooserImpl(uploadMsg);
      }

      @Override
      public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
        onenFileChooseImpleForAndroid(filePathCallback);
        return true;
      }
    });

    webView.setWebViewClient(new WebViewClient() {
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
      }
    });
    webView.loadUrl(recgPic);


  }

  public ValueCallback<Uri> mUploadMessage;
  private void openFileChooserImpl(ValueCallback<Uri> uploadMsg) {
    mUploadMessage = uploadMsg;
    Intent i = new Intent(Intent.ACTION_GET_CONTENT);
    i.addCategory(Intent.CATEGORY_OPENABLE);
    i.setType("image/*");
    startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE);
  }

  public ValueCallback<Uri[]> mUploadMessageForAndroid5;
  private void onenFileChooseImpleForAndroid(ValueCallback<Uri[]> filePathCallback) {
    mUploadMessageForAndroid5 = filePathCallback;
    Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
    contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
    contentSelectionIntent.setType("image/*");

    Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
    chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
    chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");

    startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE_FOR_ANDROID_5);
  }

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

    } else if (requestCode == FILECHOOSER_RESULTCODE_FOR_ANDROID_5){
      if (null == mUploadMessageForAndroid5)
        return;
      Uri result = (intent == null || resultCode != RESULT_OK) ? null: intent.getData();
      if (result != null) {
        mUploadMessageForAndroid5.onReceiveValue(new Uri[]{result});
      } else {
        mUploadMessageForAndroid5.onReceiveValue(new Uri[]{});
      }
      mUploadMessageForAndroid5 = null;
    }
  }

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
      //获取历史列表
      WebBackForwardList mWebBackForwardList = webView
          .copyBackForwardList();
      //判断当前历史列表是否最顶端,其实canGoBack已经判断过
      if (mWebBackForwardList.getCurrentIndex() > 0) {
        webView.goBack();
        return true;
      }
    }
    return super.onKeyDown(keyCode, event);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android  # webview  # 图片上传  # Android开发实现webview中img标签加载本地图片的方法  # Android实现点击WebView界面中图片滑动浏览与保存图片功能  # Android 实现WebView点击图片查看大图列表及图片保存功能  # Android中WebView图片实现自适应的方法  # Android WebView中图片浏览及缩放效果  # 都能  # 大家多多  # 上传文件  # 终其  # 选择器  # 在各个  # index  # chinaso  # mx  # html  # FILECHOOSER_RESULTCODE  # static  # int  # TAG  # getSimpleName  # final  # String  # button  # http  # shitu 


相关文章: 武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  如何通过主机屋免费建站教程十分钟搭建网站?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  教程网站设计制作软件,怎么创建自己的一个网站?  建站之星代理平台如何选择最佳方案?  广州建站公司哪家好?十大优质服务商推荐  微课制作网站有哪些,微课网怎么进?  如何选择网络建站服务器?高效建站必看指南  建站之星如何保障用户数据免受黑客入侵?  建站之星代理费用多少?最新价格详情介绍  网站制作说明怎么写,简述网页设计的流程并说明原因?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  制作证书网站有哪些,全国城建培训中心证书查询官网?  TestNG的testng.xml配置文件怎么写  定制建站如何定义?其核心优势是什么?  如何配置FTP站点权限与安全设置?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何选择CMS系统实现快速建站与SEO优化?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  网站制作免费,什么网站能看正片电影?  营销式网站制作方案,销售哪个网站招聘效果最好?  b2c电商网站制作流程,b2c水平综合的电商平台?  建站之星展会模版如何一键下载生成?  如何在Windows环境下新建FTP站点并设置权限?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  微信h5制作网站有哪些,免费微信H5页面制作工具?  建站之星会员如何解锁更多建站功能?  详解jQuery中基本的动画方法  广东企业建站网站优化与SEO营销核心策略指南  完全自定义免费建站平台:主题模板在线生成一站式服务  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  建站之星展会模板:智能建站与自助搭建高效解决方案  C#如何使用XPathNavigator高效查询XML  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  如何挑选高效建站主机与优质域名?  网站专业制作公司有哪些,做一个公司网站要多少钱?  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  制作门户网站的参考文献在哪,小说网站怎么建立?  建站主机类型有哪些?如何正确选型  常州自助建站费用包含哪些项目?  建站之星3.0如何解决常见操作问题? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。