栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 uploadMsg, String acceptType) {
 openFileChooserImpl(uploadMsg);
      }

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

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

      @Override
      public boolean onShowFileChooser(WebView webView, ValueCallback 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 mUploadMessage;
  private void openFileChooserImpl(ValueCallback 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 mUploadMessageForAndroid5;
  private void onenFileChooseImpleForAndroid(ValueCallback 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);
  }
}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/159760.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号