package com.example.jingbin.cloudreader.view.webview.config; import android.content.Intent; import android.content.pm.ActivityInfo; import android.net.Uri; import android.view.LayoutInflater; import android.view.View; import android.webkit.ValueCallback; import android.webkit.WebChromeClient; import android.webkit.WebView; import com.example.jingbin.cloudreader.R; import com.example.jingbin.cloudreader.view.webview.WebViewActivity; import static android.app.Activity.RESULT_OK; /** * Created by jingbin on 2016/11/17. * - 播放网络视频配置 * - 上传图片(兼容) * 点击空白区域的左边,因是公司图片,自己编辑过,所以显示不全,见谅 */ public class MyWebChromeClient extends WebChromeClient { private ValueCallback<Uri> mUploadMessage; private ValueCallback<Uri[]> mUploadMessageForAndroid5; public static int FILECHOOSER_RESULTCODE = 1; public static int FILECHOOSER_RESULTCODE_FOR_ANDROID_5 = 2; private View mXProgressVideo; private WebViewActivity mActivity; private IWebPageView mIWebPageView; private View mXCustomView; private CustomViewCallback mXCustomViewCallback; public MyWebChromeClient(IWebPageView mIWebPageView) { this.mIWebPageView = mIWebPageView; this.mActivity = (WebViewActivity) mIWebPageView; } // 播放网络视频时全屏会被调用的方法 @Override public void onShowCustomView(View view, CustomViewCallback callback) { mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); mIWebPageView.hindWebView(); // 如果一个视图已经存在,那么立刻终止并新建一个 if (mXCustomView != null) { callback.onCustomViewHidden(); return; } mActivity.fullViewAddView(view); mXCustomView = view; mXCustomViewCallback = callback; mIWebPageView.showVideoFullView(); } // 视频播放退出全屏会被调用的 @Override public void onHideCustomView() { if (mXCustomView == null)// 不是全屏播放状态 return; mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); mXCustomView.setVisibility(View.GONE); if (mActivity.getVideoFullView() != null) { mActivity.getVideoFullView().removeView(mXCustomView); } mXCustomView = null; mIWebPageView.hindVideoFullView(); mXCustomViewCallback.onCustomViewHidden(); mIWebPageView.showWebView(); } // 视频加载时进程loading @Override public View getVideoLoadingProgressView() { if (mXProgressVideo == null) { LayoutInflater inflater = LayoutInflater.from(mActivity); mXProgressVideo = inflater.inflate(R.layout.video_loading_progress, null); } return mXProgressVideo; } @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); mIWebPageView.progressChanged(newProgress); } /** * 判断是否是全屏 */ public boolean inCustomView() { return (mXCustomView != null); } @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); // 设置title mActivity.setTitle(title); this.title = title; } private String title = ""; public String getTitle() { return title + " "; } //扩展浏览器上传文件 //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); } // For Android > 5.0 @Override public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> uploadMsg, FileChooserParams fileChooserParams) { openFileChooserImplForAndroid5(uploadMsg); return true; } private void openFileChooserImpl(ValueCallback<Uri> uploadMsg) { mUploadMessage = uploadMsg; Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); mActivity.startActivityForResult(Intent.createChooser(i, "文件选择"), FILECHOOSER_RESULTCODE); } private void openFileChooserImplForAndroid5(ValueCallback<Uri[]> uploadMsg) { mUploadMessageForAndroid5 = uploadMsg; 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, "图片选择"); mActivity.startActivityForResult(chooserIntent, FILECHOOSER_RESULTCODE_FOR_ANDROID_5); } /** * 5.0以下 上传图片成功后的回调 */ public void mUploadMessage(Intent intent, int resultCode) { if (null == mUploadMessage) return; Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData(); mUploadMessage.onReceiveValue(result); mUploadMessage = null; } /** * 5.0以上 上传图片成功后的回调 */ public void mUploadMessageForAndroid5(Intent intent, int resultCode) { 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; } }