|
|
|
@@ -28,9 +28,10 @@ import android.widget.FrameLayout; |
|
|
|
import androidx.annotation.Nullable; |
|
|
|
import androidx.annotation.RequiresApi; |
|
|
|
|
|
|
|
import com.aispeech.nativedemo.DuiApplication; |
|
|
|
import com.aispeech.nativedemo.databinding.ActivityCustomWebBinding; |
|
|
|
|
|
|
|
//import wendu.dsbridge.CompletionHandler; |
|
|
|
import wendu.dsbridge.CompletionHandler; |
|
|
|
|
|
|
|
/** |
|
|
|
* Webview 浏览器 |
|
|
|
@@ -74,15 +75,14 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
*/ |
|
|
|
private String mShareChannels; |
|
|
|
|
|
|
|
// @Override |
|
|
|
// protected void onCreate(@Nullable Bundle savedInstanceState) { |
|
|
|
// super.onCreate(savedInstanceState); |
|
|
|
// |
|
|
|
// mBinding = ActivityCustomWebBinding.inflate(getLayoutInflater()); |
|
|
|
// setContentView(mBinding.getRoot()); |
|
|
|
// initStatusHeight(); |
|
|
|
// initShare(); |
|
|
|
// //网页后退 |
|
|
|
@Override |
|
|
|
protected void onCreate(@Nullable Bundle savedInstanceState) { |
|
|
|
super.onCreate(savedInstanceState); |
|
|
|
|
|
|
|
mBinding = ActivityCustomWebBinding.inflate(getLayoutInflater()); |
|
|
|
setContentView(mBinding.getRoot()); |
|
|
|
initStatusHeight(); |
|
|
|
//网页后退 |
|
|
|
// mBinding.ivBack.setOnClickListener(view -> { |
|
|
|
// //网页后退 |
|
|
|
// if (mBinding.webView.canGoBack()){ |
|
|
|
@@ -96,111 +96,71 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// mBinding.ivClose.setOnClickListener(view -> { |
|
|
|
// finish(); |
|
|
|
// }); |
|
|
|
// |
|
|
|
// mBinding.llRightContainer.setOnClickListener(view -> { |
|
|
|
// toShare(); |
|
|
|
// }); |
|
|
|
// |
|
|
|
// initWeb(); |
|
|
|
// //加载网页 |
|
|
|
// mUrl = getIntent().getStringExtra(IntentKey.WEB_URL); |
|
|
|
// mBinding.webView.loadUrl(mUrl + ""); |
|
|
|
// if (mWebParams != null) { |
|
|
|
// mBinding.webTaskAction.setVisibility(View.VISIBLE); |
|
|
|
// if (!StringUtils.isEmpty(mWebParams.title)) { |
|
|
|
// mBinding.tvFloat.setText(mWebParams.title); |
|
|
|
// } |
|
|
|
// mBinding.webTaskAction.setOnClickListener(new View.OnClickListener() { |
|
|
|
// @Override |
|
|
|
// public void onClick(View v) { |
|
|
|
// //跳转其他路由页面 |
|
|
|
// if ("native".equals(mWebParams.redirect) && |
|
|
|
// !TextUtils.isEmpty(mWebParams.redirectUrl)) { |
|
|
|
// if (AppPath.StoryHome.equals(mWebParams.redirectUrl)) { |
|
|
|
// if (!SPUtils.getInstance().decodeBoolean(SpConstants.STORY_GUIDE)) { |
|
|
|
// Router.startUri(getBaseActivity(), AppPath.StoryGuide); |
|
|
|
// return; |
|
|
|
// } |
|
|
|
// } |
|
|
|
// Router.startUri(getBaseActivity(), mWebParams.redirectUrl); |
|
|
|
// return; |
|
|
|
// } |
|
|
|
// //去做任务 |
|
|
|
// if ("nativeparam".equals(mWebParams.redirect) && |
|
|
|
// !TextUtils.isEmpty(mWebParams.redirectUrl) && mActionData != null) { |
|
|
|
// TaskJumpUtil.jump(getBaseActivity(), mActionData, null, StatisticsUtils.VAULT_TASK_SOURCE_BANNER); |
|
|
|
// return; |
|
|
|
// |
|
|
|
// } |
|
|
|
// //h5 |
|
|
|
// if ("url".equals(mWebParams.redirect) && |
|
|
|
// !TextUtils.isEmpty(mWebParams.redirectUrl)) { |
|
|
|
// TaskJumpUtil.goWeb(getBaseActivity(), mWebParams.redirectUrl, true); |
|
|
|
// return; |
|
|
|
// } |
|
|
|
// } |
|
|
|
// }); |
|
|
|
// } else { |
|
|
|
// mBinding.webTaskAction.setVisibility(View.GONE); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 设置自定义状态栏 |
|
|
|
// */ |
|
|
|
// private void initStatusHeight() { |
|
|
|
// ViewGroup.LayoutParams layoutParams = mBinding.vStatusBar.getLayoutParams(); |
|
|
|
// layoutParams.height = StatusBarUtil.getStatusBarHeight(); |
|
|
|
// mBinding.vStatusBar.setLayoutParams(layoutParams); |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 初始化web |
|
|
|
// */ |
|
|
|
// private void initWeb() { |
|
|
|
// setCustomWebChromeClient(); |
|
|
|
// |
|
|
|
// setCustomWebViewClient(); |
|
|
|
// |
|
|
|
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, |
|
|
|
// WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); |
|
|
|
// //设置 |
|
|
|
// mBinding.webView.getSettings().setGeolocationEnabled(false); |
|
|
|
// mBinding.webView.getSettings().setJavaScriptEnabled(true); |
|
|
|
// mBinding.webView.getSettings().setDomStorageEnabled(true); |
|
|
|
// mBinding.webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); |
|
|
|
// |
|
|
|
// mBinding.webView.getSettings().setSupportMultipleWindows(true); |
|
|
|
// mBinding.webView.getSettings().setLoadWithOverviewMode(true); |
|
|
|
// mBinding.webView.getSettings().setUseWideViewPort(true); |
|
|
|
// mBinding.webView.getSettings().setSupportZoom(true); |
|
|
|
// |
|
|
|
// mBinding.webView.getSettings().setAllowFileAccess(true); |
|
|
|
// mBinding.webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL); |
|
|
|
// |
|
|
|
// mBinding.webView.getSettings().setUserAgentString(mBinding.webView.getSettings().getUserAgentString() + ":Android nwdn"); |
|
|
|
// |
|
|
|
// mBinding.webView.addJavascriptObject(new JsApi(), null); |
|
|
|
// |
|
|
|
// if (Build.VERSION.SDK_INT >= 21) { |
|
|
|
// mBinding.webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); |
|
|
|
// } |
|
|
|
// |
|
|
|
// //错误重试 |
|
|
|
|
|
|
|
|
|
|
|
initWeb(); |
|
|
|
//加载网页 |
|
|
|
mUrl = getIntent().getStringExtra(IntentKey.WEB_URL); |
|
|
|
mBinding.webView.loadUrl(mUrl + ""); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 设置自定义状态栏 |
|
|
|
*/ |
|
|
|
private void initStatusHeight() { |
|
|
|
ViewGroup.LayoutParams layoutParams = mBinding.vStatusBar.getLayoutParams(); |
|
|
|
layoutParams.height = StatusBarUtil.getStatusBarHeight(); |
|
|
|
mBinding.vStatusBar.setLayoutParams(layoutParams); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 初始化web |
|
|
|
*/ |
|
|
|
private void initWeb() { |
|
|
|
setCustomWebChromeClient(); |
|
|
|
|
|
|
|
setCustomWebViewClient(); |
|
|
|
|
|
|
|
getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, |
|
|
|
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); |
|
|
|
//设置 |
|
|
|
mBinding.webView.getSettings().setGeolocationEnabled(false); |
|
|
|
mBinding.webView.getSettings().setJavaScriptEnabled(true); |
|
|
|
mBinding.webView.getSettings().setDomStorageEnabled(true); |
|
|
|
mBinding.webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); |
|
|
|
|
|
|
|
mBinding.webView.getSettings().setSupportMultipleWindows(true); |
|
|
|
mBinding.webView.getSettings().setLoadWithOverviewMode(true); |
|
|
|
mBinding.webView.getSettings().setUseWideViewPort(true); |
|
|
|
mBinding.webView.getSettings().setSupportZoom(true); |
|
|
|
|
|
|
|
mBinding.webView.getSettings().setAllowFileAccess(true); |
|
|
|
mBinding.webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL); |
|
|
|
|
|
|
|
mBinding.webView.getSettings().setUserAgentString(mBinding.webView.getSettings().getUserAgentString() + ":Android nwdn"); |
|
|
|
|
|
|
|
mBinding.webView.addJavascriptObject(new JsApi(), null); |
|
|
|
|
|
|
|
if (Build.VERSION.SDK_INT >= 21) { |
|
|
|
mBinding.webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); |
|
|
|
} |
|
|
|
|
|
|
|
//错误重试 |
|
|
|
// mBinding.webError.setOnReloadListener(new ErrorView.OnReloadListener() { |
|
|
|
// @Override |
|
|
|
// public void onReload() { |
|
|
|
// mBinding.webView.reload(); |
|
|
|
// } |
|
|
|
// }); |
|
|
|
// } |
|
|
|
// |
|
|
|
// private void setCustomWebViewClient() { |
|
|
|
// //加载监听 |
|
|
|
// mBinding.webView.setWebViewClient(new WebViewClient(){ |
|
|
|
// |
|
|
|
// @Override |
|
|
|
// public boolean shouldOverrideUrlLoading(WebView view, String url) { |
|
|
|
} |
|
|
|
|
|
|
|
private void setCustomWebViewClient() { |
|
|
|
//加载监听 |
|
|
|
mBinding.webView.setWebViewClient(new WebViewClient(){ |
|
|
|
|
|
|
|
@Override |
|
|
|
public boolean shouldOverrideUrlLoading(WebView view, String url) { |
|
|
|
// if (url.startsWith("weixin://wap/pay?")) { |
|
|
|
// if (!WechatSocial.isInstalledWx(CustomWebViewActivity.this)) { |
|
|
|
// AppToast.showWarning(getString(R.string.wx_installed_tip)); |
|
|
|
@@ -212,21 +172,21 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// startActivity(intent); |
|
|
|
// return true; |
|
|
|
// } |
|
|
|
// |
|
|
|
// return super.shouldOverrideUrlLoading(view, url); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @Override |
|
|
|
// public void onPageFinished(WebView view, String url) { |
|
|
|
// super.onPageFinished(view, url); |
|
|
|
// //设置title |
|
|
|
// String title = mBinding.webView.getTitle(); |
|
|
|
// if (StringUtils.notEmpty(title) && title.startsWith("http")) { |
|
|
|
|
|
|
|
return super.shouldOverrideUrlLoading(view, url); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onPageFinished(WebView view, String url) { |
|
|
|
super.onPageFinished(view, url); |
|
|
|
//设置title |
|
|
|
String title = mBinding.webView.getTitle(); |
|
|
|
// if (!TextUtils.isEmpty(title) && title.startsWith("http")) { |
|
|
|
// mBinding.tvTitle.setText(""); |
|
|
|
// } else { |
|
|
|
// mBinding.tvTitle.setText(title); |
|
|
|
// } |
|
|
|
// |
|
|
|
|
|
|
|
// if (mBinding.webView.canGoBack()) { |
|
|
|
// mBinding.ivClose.setVisibility(View.VISIBLE); |
|
|
|
// mBinding.ivBack.setBackgroundResource(R.drawable.icon_backh5_black_nav); |
|
|
|
@@ -234,186 +194,182 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// mBinding.ivClose.setVisibility(View.GONE); |
|
|
|
// mBinding.ivBack.setBackgroundResource(R.drawable.icon_back_black_nav); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// @Override |
|
|
|
// public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { |
|
|
|
// super.onReceivedSslError(view, handler, error); |
|
|
|
// String errorStr = error.toString(); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @RequiresApi(api = Build.VERSION_CODES.M) |
|
|
|
// @Override |
|
|
|
// public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { |
|
|
|
// super.onReceivedError(view, request, error); |
|
|
|
// String errorStr = error.getDescription().toString(); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @Override |
|
|
|
// public void onPageStarted(WebView view, String url, Bitmap favicon) { |
|
|
|
// super.onPageStarted(view, url, favicon); |
|
|
|
// mBinding.webError.setVisibility(View.GONE); |
|
|
|
// mBinding.webView.setVisibility(View.VISIBLE); |
|
|
|
// } |
|
|
|
// }); |
|
|
|
// } |
|
|
|
// |
|
|
|
// private void setCustomWebChromeClient() { |
|
|
|
// //加载进度 |
|
|
|
// mBinding.webView.setWebChromeClient(new WebChromeClient(){ |
|
|
|
// |
|
|
|
// /*** 视频播放相关的方法 **/ |
|
|
|
// @Override |
|
|
|
// public void onShowCustomView(View view, CustomViewCallback callback) { |
|
|
|
// super.onShowCustomView(view, callback); |
|
|
|
// showCustomView(view, callback); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @Override |
|
|
|
// public void onHideCustomView() { |
|
|
|
// super.onHideCustomView(); |
|
|
|
// hideCustomView(); |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * API >= 21(Android 5.0.1)回调此方法 |
|
|
|
// */ |
|
|
|
// @Override |
|
|
|
// public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) { |
|
|
|
// // (1)该方法回调时说明版本API >= 21,此时将结果赋值给 mUploadCallbackAboveL,使之 != null |
|
|
|
// mUploadCallbackAboveL = filePathCallback; |
|
|
|
// takePhoto(); |
|
|
|
// return true; |
|
|
|
// } |
|
|
|
// |
|
|
|
// }); |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** 视频播放全屏 **/ |
|
|
|
// private void showCustomView(View view, WebChromeClient.CustomViewCallback callback) { |
|
|
|
// if (mVideoView != null) { |
|
|
|
// callback.onCustomViewHidden(); |
|
|
|
// return; |
|
|
|
// } |
|
|
|
// |
|
|
|
// mBinding.flFullVideoContainer.setVisibility(View.VISIBLE); |
|
|
|
// mBinding.webView.setVisibility(View.GONE); |
|
|
|
// mBinding.flFullVideoContainer.addView(view); |
|
|
|
// |
|
|
|
// FrameLayout.LayoutParams flLayoutParams = (FrameLayout.LayoutParams)view.getLayoutParams(); |
|
|
|
// flLayoutParams.gravity = Gravity.CENTER; |
|
|
|
// view.setLayoutParams(flLayoutParams); |
|
|
|
// |
|
|
|
// mVideoView = view; |
|
|
|
// mVideoViewCallback = callback; |
|
|
|
// setStatusBarVisibility(false); |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** 隐藏视频全屏 */ |
|
|
|
// private void hideCustomView() { |
|
|
|
// if (mVideoView == null) { |
|
|
|
// return; |
|
|
|
// } |
|
|
|
// |
|
|
|
// setStatusBarVisibility(true); |
|
|
|
// mBinding.flFullVideoContainer.removeView(mVideoView); |
|
|
|
// mBinding.flFullVideoContainer.setVisibility(View.GONE); |
|
|
|
// mVideoView = null; |
|
|
|
// mVideoViewCallback.onCustomViewHidden(); |
|
|
|
// mBinding.webView.setVisibility(View.VISIBLE); |
|
|
|
// } |
|
|
|
// |
|
|
|
// private void setStatusBarVisibility(boolean visible) { |
|
|
|
// int flag = visible ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN; |
|
|
|
// getWindow().setFlags(flag, WindowManager.LayoutParams.FLAG_FULLSCREEN); |
|
|
|
// } |
|
|
|
// |
|
|
|
// private ValueCallback<Uri[]> mUploadCallbackAboveL; |
|
|
|
// |
|
|
|
// private void takePhoto() { |
|
|
|
// Intent intent = new Intent(Intent.ACTION_GET_CONTENT); |
|
|
|
// intent.addCategory(Intent.CATEGORY_OPENABLE); |
|
|
|
// intent.setType("image/*"); |
|
|
|
// startActivityForResult(Intent.createChooser(intent, "Image Chooser"), REQUEST_CODE_SELECTED_PIC); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @Override |
|
|
|
// protected void onActivityResult(int requestCode, int resultCode, Intent data) { |
|
|
|
// super.onActivityResult(requestCode, resultCode, data); |
|
|
|
// if (requestCode == REQUEST_CODE_SELECTED_PIC) { |
|
|
|
// //针对5.0以上, 以下区分处理方法 |
|
|
|
// if (mUploadCallbackAboveL != null) { |
|
|
|
// chooseAbove(resultCode, data); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// //分享需要 |
|
|
|
// ShareDialog.shareOnActivityResult(this, requestCode, resultCode, data); |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * Android API >= 21(Android 5.0) 版本的回调处理 |
|
|
|
// * |
|
|
|
// * @param resultCode 选取文件或拍照的返回码 |
|
|
|
// * @param data 选取文件或拍照的返回结果 |
|
|
|
// */ |
|
|
|
// private void chooseAbove(int resultCode, Intent data) { |
|
|
|
// if (RESULT_OK == resultCode) { |
|
|
|
// if (data != null) { |
|
|
|
// // 这里是针对从文件中选图片的处理, 区别是一个返回的URI, 一个是URI[] |
|
|
|
// Uri[] results; |
|
|
|
// Uri uriData = data.getData(); |
|
|
|
// if (uriData != null) { |
|
|
|
// results = new Uri[]{uriData}; |
|
|
|
// mUploadCallbackAboveL.onReceiveValue(results); |
|
|
|
// } else { |
|
|
|
// mUploadCallbackAboveL.onReceiveValue(null); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// } else { |
|
|
|
// mUploadCallbackAboveL.onReceiveValue(null); |
|
|
|
// } |
|
|
|
// mUploadCallbackAboveL = null; |
|
|
|
// } |
|
|
|
// |
|
|
|
// @Override |
|
|
|
// public boolean onKeyUp(int keyCode, KeyEvent event) { |
|
|
|
// |
|
|
|
// //网页后退 |
|
|
|
// if (keyCode == KeyEvent.KEYCODE_BACK) { |
|
|
|
// /** 回退键 事件处理 优先级:视频播放全屏-网页回退-关闭页面 */ |
|
|
|
// if (mVideoView != null) { |
|
|
|
// hideCustomView(); |
|
|
|
// } else if (mBinding.webView.canGoBack()) { |
|
|
|
// mBinding.webView.goBack(); |
|
|
|
// } else { |
|
|
|
// finish(); |
|
|
|
// } |
|
|
|
// |
|
|
|
// return true; |
|
|
|
// } |
|
|
|
// |
|
|
|
// return super.onKeyUp(keyCode, event); |
|
|
|
// } |
|
|
|
// |
|
|
|
// @Override |
|
|
|
// protected void onDestroy() { |
|
|
|
// super.onDestroy(); |
|
|
|
// if (mBinding != null && mBinding.webView != null) { |
|
|
|
// mBinding.webView.destroy(); |
|
|
|
// mVideoView = null; |
|
|
|
// mBinding = null; |
|
|
|
// } |
|
|
|
// |
|
|
|
// ShareDialog.unRegisterShareListener(this, mShareResultReceiver); |
|
|
|
// } |
|
|
|
// |
|
|
|
// public class JsApi { |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 用于显示或者隐藏右上角分享按钮 |
|
|
|
// */ |
|
|
|
// @JavascriptInterface |
|
|
|
// public void PageReady(Object paramJson, CompletionHandler handler) { |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { |
|
|
|
super.onReceivedSslError(view, handler, error); |
|
|
|
String errorStr = error.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
@RequiresApi(api = Build.VERSION_CODES.M) |
|
|
|
@Override |
|
|
|
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { |
|
|
|
super.onReceivedError(view, request, error); |
|
|
|
String errorStr = error.getDescription().toString(); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onPageStarted(WebView view, String url, Bitmap favicon) { |
|
|
|
super.onPageStarted(view, url, favicon); |
|
|
|
//mBinding.webError.setVisibility(View.GONE); |
|
|
|
mBinding.webView.setVisibility(View.VISIBLE); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
private void setCustomWebChromeClient() { |
|
|
|
//加载进度 |
|
|
|
mBinding.webView.setWebChromeClient(new WebChromeClient(){ |
|
|
|
|
|
|
|
/*** 视频播放相关的方法 **/ |
|
|
|
@Override |
|
|
|
public void onShowCustomView(View view, CustomViewCallback callback) { |
|
|
|
super.onShowCustomView(view, callback); |
|
|
|
showCustomView(view, callback); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public void onHideCustomView() { |
|
|
|
super.onHideCustomView(); |
|
|
|
hideCustomView(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* API >= 21(Android 5.0.1)回调此方法 |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) { |
|
|
|
// (1)该方法回调时说明版本API >= 21,此时将结果赋值给 mUploadCallbackAboveL,使之 != null |
|
|
|
mUploadCallbackAboveL = filePathCallback; |
|
|
|
takePhoto(); |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
/** 视频播放全屏 **/ |
|
|
|
private void showCustomView(View view, WebChromeClient.CustomViewCallback callback) { |
|
|
|
if (mVideoView != null) { |
|
|
|
callback.onCustomViewHidden(); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
mBinding.flFullVideoContainer.setVisibility(View.VISIBLE); |
|
|
|
mBinding.webView.setVisibility(View.GONE); |
|
|
|
mBinding.flFullVideoContainer.addView(view); |
|
|
|
|
|
|
|
FrameLayout.LayoutParams flLayoutParams = (FrameLayout.LayoutParams)view.getLayoutParams(); |
|
|
|
flLayoutParams.gravity = Gravity.CENTER; |
|
|
|
view.setLayoutParams(flLayoutParams); |
|
|
|
|
|
|
|
mVideoView = view; |
|
|
|
mVideoViewCallback = callback; |
|
|
|
setStatusBarVisibility(false); |
|
|
|
} |
|
|
|
|
|
|
|
/** 隐藏视频全屏 */ |
|
|
|
private void hideCustomView() { |
|
|
|
if (mVideoView == null) { |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
setStatusBarVisibility(true); |
|
|
|
mBinding.flFullVideoContainer.removeView(mVideoView); |
|
|
|
mBinding.flFullVideoContainer.setVisibility(View.GONE); |
|
|
|
mVideoView = null; |
|
|
|
mVideoViewCallback.onCustomViewHidden(); |
|
|
|
mBinding.webView.setVisibility(View.VISIBLE); |
|
|
|
} |
|
|
|
|
|
|
|
private void setStatusBarVisibility(boolean visible) { |
|
|
|
int flag = visible ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN; |
|
|
|
getWindow().setFlags(flag, WindowManager.LayoutParams.FLAG_FULLSCREEN); |
|
|
|
} |
|
|
|
|
|
|
|
private ValueCallback<Uri[]> mUploadCallbackAboveL; |
|
|
|
|
|
|
|
private void takePhoto() { |
|
|
|
Intent intent = new Intent(Intent.ACTION_GET_CONTENT); |
|
|
|
intent.addCategory(Intent.CATEGORY_OPENABLE); |
|
|
|
intent.setType("image/*"); |
|
|
|
startActivityForResult(Intent.createChooser(intent, "Image Chooser"), REQUEST_CODE_SELECTED_PIC); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) { |
|
|
|
super.onActivityResult(requestCode, resultCode, data); |
|
|
|
if (requestCode == REQUEST_CODE_SELECTED_PIC) { |
|
|
|
//针对5.0以上, 以下区分处理方法 |
|
|
|
if (mUploadCallbackAboveL != null) { |
|
|
|
chooseAbove(resultCode, data); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Android API >= 21(Android 5.0) 版本的回调处理 |
|
|
|
* |
|
|
|
* @param resultCode 选取文件或拍照的返回码 |
|
|
|
* @param data 选取文件或拍照的返回结果 |
|
|
|
*/ |
|
|
|
private void chooseAbove(int resultCode, Intent data) { |
|
|
|
if (RESULT_OK == resultCode) { |
|
|
|
if (data != null) { |
|
|
|
// 这里是针对从文件中选图片的处理, 区别是一个返回的URI, 一个是URI[] |
|
|
|
Uri[] results; |
|
|
|
Uri uriData = data.getData(); |
|
|
|
if (uriData != null) { |
|
|
|
results = new Uri[]{uriData}; |
|
|
|
mUploadCallbackAboveL.onReceiveValue(results); |
|
|
|
} else { |
|
|
|
mUploadCallbackAboveL.onReceiveValue(null); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
mUploadCallbackAboveL.onReceiveValue(null); |
|
|
|
} |
|
|
|
mUploadCallbackAboveL = null; |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
public boolean onKeyUp(int keyCode, KeyEvent event) { |
|
|
|
|
|
|
|
//网页后退 |
|
|
|
if (keyCode == KeyEvent.KEYCODE_BACK) { |
|
|
|
/** 回退键 事件处理 优先级:视频播放全屏-网页回退-关闭页面 */ |
|
|
|
if (mVideoView != null) { |
|
|
|
hideCustomView(); |
|
|
|
} else if (mBinding.webView.canGoBack()) { |
|
|
|
mBinding.webView.goBack(); |
|
|
|
} else { |
|
|
|
finish(); |
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
return super.onKeyUp(keyCode, event); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
protected void onDestroy() { |
|
|
|
super.onDestroy(); |
|
|
|
if (mBinding != null && mBinding.webView != null) { |
|
|
|
mBinding.webView.destroy(); |
|
|
|
mVideoView = null; |
|
|
|
mBinding = null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public class JsApi { |
|
|
|
|
|
|
|
/** |
|
|
|
* 用于显示或者隐藏右上角分享按钮 |
|
|
|
*/ |
|
|
|
@JavascriptInterface |
|
|
|
public void PageReady(Object paramJson, CompletionHandler handler) { |
|
|
|
// if (paramJson != null) { |
|
|
|
// PageReadyParam pageReadyParam = GsonUtils.gsonResolve(paramJson.toString(), PageReadyParam.class); |
|
|
|
// if (pageReadyParam != null && pageReadyParam.isShare == 1) { |
|
|
|
@@ -421,7 +377,7 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// mShareCover = pageReadyParam.shareCover; |
|
|
|
// mShareTitle = pageReadyParam.shareTitle; |
|
|
|
// mShareDesc = pageReadyParam.shareDesc; |
|
|
|
// postInUIThread(() -> { |
|
|
|
// DuiApplication.postInUIThread(() -> { |
|
|
|
// if (mBinding != null) { |
|
|
|
// mBinding.llRightContainer.setVisibility(View.VISIBLE); |
|
|
|
// } |
|
|
|
@@ -432,13 +388,13 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// String userToken = AccountManager.getInstance().getToken(); |
|
|
|
// PageReadyReturn pageReadyReturn = new PageReadyReturn(BaseReturn.JS_SUCCESS, "", userToken); |
|
|
|
// handler.complete(GsonUtils.toJson(pageReadyReturn)); |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 用于 H5 点击分享按钮 |
|
|
|
// */ |
|
|
|
// @JavascriptInterface |
|
|
|
// public void PageShare(Object paramJson, CompletionHandler handler) { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 用于 H5 点击分享按钮 |
|
|
|
*/ |
|
|
|
@JavascriptInterface |
|
|
|
public void PageShare(Object paramJson, CompletionHandler handler) { |
|
|
|
// if (paramJson != null) { |
|
|
|
// PageShareParam pageShareParam = GsonUtils.gsonResolve(paramJson.toString(), PageShareParam.class); |
|
|
|
// if (pageShareParam != null) { |
|
|
|
@@ -463,13 +419,13 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// } |
|
|
|
// BaseReturn pageShareReturn = new BaseReturn(BaseReturn.JS_FAIL, "参数不能为空"); |
|
|
|
// handler.complete(GsonUtils.toJson(pageShareReturn)); |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 用于 H5 页面跳转 |
|
|
|
// */ |
|
|
|
// @JavascriptInterface |
|
|
|
// public void PageToPath(Object paramJson, CompletionHandler handler) { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 用于 H5 页面跳转 |
|
|
|
*/ |
|
|
|
@JavascriptInterface |
|
|
|
public void PageToPath(Object paramJson, CompletionHandler handler) { |
|
|
|
// BaseReturn pageShareReturn; |
|
|
|
// if (paramJson != null) { |
|
|
|
// PageToPathParam pageShareParam = GsonUtils.gsonResolve(paramJson.toString(), PageToPathParam.class); |
|
|
|
@@ -484,13 +440,13 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// } |
|
|
|
// pageShareReturn = new BaseReturn(BaseReturn.JS_FAIL, "没有找到页面"); |
|
|
|
// handler.complete(GsonUtils.toJson(pageShareReturn)); |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 用于 H5 页面跳转 |
|
|
|
// */ |
|
|
|
// @JavascriptInterface |
|
|
|
// public void SaveImageToPhotosAlbum(Object paramJson, CompletionHandler handler) { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 用于 H5 页面跳转 |
|
|
|
*/ |
|
|
|
@JavascriptInterface |
|
|
|
public void SaveImageToPhotosAlbum(Object paramJson, CompletionHandler handler) { |
|
|
|
// BaseReturn baseReturn; |
|
|
|
// if (paramJson != null) { |
|
|
|
// SaveImageToPhotoAlbumParam saveImageParam = GsonUtils.gsonResolve(paramJson.toString(), SaveImageToPhotoAlbumParam.class); |
|
|
|
@@ -507,13 +463,13 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// |
|
|
|
// baseReturn = new BaseReturn(BaseReturn.JS_FAIL, "请传有效URL"); |
|
|
|
// handler.complete(GsonUtils.toJson(baseReturn)); |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 待确定,跳转到外部浏览器 |
|
|
|
// */ |
|
|
|
// @JavascriptInterface |
|
|
|
// public void OpenBrowser(Object paramJson, CompletionHandler handler) { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 待确定,跳转到外部浏览器 |
|
|
|
*/ |
|
|
|
@JavascriptInterface |
|
|
|
public void OpenBrowser(Object paramJson, CompletionHandler handler) { |
|
|
|
// BaseReturn baseReturn; |
|
|
|
// if (paramJson != null) { |
|
|
|
// OpenBrowserParam openBrowserParam = GsonUtils.gsonResolve(paramJson.toString(), OpenBrowserParam.class); |
|
|
|
@@ -525,13 +481,13 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// handler.complete(GsonUtils.toJson(baseReturn)); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 待确定,跳转到外部浏览器 |
|
|
|
// */ |
|
|
|
// @JavascriptInterface |
|
|
|
// public void CheckOpenApp(Object paramJson, CompletionHandler handler) { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 待确定,跳转到外部浏览器 |
|
|
|
*/ |
|
|
|
@JavascriptInterface |
|
|
|
public void CheckOpenApp(Object paramJson, CompletionHandler handler) { |
|
|
|
// final BaseReturn baseReturn; |
|
|
|
// if (paramJson != null) { |
|
|
|
// PackageParam packageParam = GsonUtils.gsonResolve(paramJson.toString(), PackageParam.class); |
|
|
|
@@ -547,13 +503,13 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// } |
|
|
|
// } |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 用于 H5 点击分享按钮 |
|
|
|
// */ |
|
|
|
// @JavascriptInterface |
|
|
|
// public void OpenShare(Object paramJson, CompletionHandler handler) { |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 用于 H5 点击分享按钮 |
|
|
|
*/ |
|
|
|
@JavascriptInterface |
|
|
|
public void OpenShare(Object paramJson, CompletionHandler handler) { |
|
|
|
// if (paramJson != null) { |
|
|
|
// PageShareParam pageShareParam = GsonUtils.gsonResolve(paramJson.toString(), PageShareParam.class); |
|
|
|
// if (pageShareParam != null) { |
|
|
|
@@ -578,7 +534,7 @@ public class CustomWebViewActivity extends Activity { |
|
|
|
// } |
|
|
|
// BaseReturn pageShareReturn = new BaseReturn(BaseReturn.JS_FAIL, "参数不能为空"); |
|
|
|
// handler.complete(GsonUtils.toJson(pageShareReturn)); |
|
|
|
// } |
|
|
|
// } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |