app退出后台时候,WebView在后台依旧音频和视频继续播放,不能暂停掉,需要重写在WebView的dispatchWindowVisibilityChanged(int)方法
@Override
public void dispatchWindowVisibilityChanged(int visibility) {
// 传入View.VISIBLE
super.dispatchWindowVisibilityChanged(View.VISIBLE);
}
当传入View.GONE(切换至后台 或执行 onStop),在View中向下传播。通知WM当前窗口不可视。系统会调用view的dispatchWindowVisibilityChanged(visibility)方法。该方法通知子view(WebView)。届时WebView内部根据View的visibility控制音频的播放。
相机、相册
web_view.setWebChromeClient(new WebChromeClient(){
// 前提:申请相机、文件读写权限。
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
mUploadCallbackAboveL = filePathCallback;
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
Intent Photo = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
Intent chooserIntent = Intent.createChooser(Photo,getString(R.string.title));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Parcelable[]{captureIntent});
startActivityForResult(chooserIntent, REQUEST_CODE);
return true;
}
}
扫一扫
H5在WebView上启动扫一扫需要权限。在用户给予APP相机权限后H5访问相机扫一扫依然需要进行一次WebView的授权。
web_view.setWebChromeClient(new WebChromeClient(){
@Override
public void onPermissionRequest(PermissionRequest request) {
final String[] requestedResources = request.getResources();
for (String r : requestedResources) {
// 具体需要什么权限在这里扩展即可。
if (r.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE});
break;
}
}
}
}