package cn.yongxing.webviewwithcamera;
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ClipData;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.GeolocationPermissions;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.EditText;
import java.io.File;
import cn.fengrong.lib_activityresult.bean.Result;
import cn.fengrong.lib_activityresult.listener.ActivityResultListener;
import static android.app.Activity.RESULT_OK;
/**
* @author yongxing
*/
public class MyWebChromeClient extends WebChromeClient {
private static final int FILE_CALL_TYPE_NORMAL = 0;//表示调用类型是:相机、相册
private static final int FILE_CALL_TYPE_CAMERA = 1;//表示调用类型是:只有相机
private static final int FILE_CALL_TYPE_VIDEO = 2;//表示调用类型是:只有录像
private Context mContext;
private int callType = FILE_CALL_TYPE_NORMAL;
public ValueCallback<Uri> mUploadMessage;// 表单的数据信息
public ValueCallback<Uri[]> mUploadCallbackAboveL;
public Uri imageUri;
public MyWebChromeClient(Context context) {
this.mContext = context;
}
@Override
public void onCloseWindow(WebView window) {
super.onCloseWindow(window);
}
@Override
public boolean onCreateWindow(WebView view, boolean dialog,
boolean userGesture, Message resultMsg) {
return super.onCreateWindow(view, dialog, userGesture, resultMsg);
}
/**
* 覆盖默认的window.alert展示界面,避免title里显示为“:来自file:////”
*/
@Override
public boolean onJsAlert(WebView view, String url, String message,
final JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("对话框")
.setMessage(message)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。
}
});
// 不需要绑定按键事件
// 屏蔽keycode等于84之类的按键
builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
Log.i("onJsAlert", "keyCode==" + keyCode + "event=" + event);
return true;
}
});
// 禁止响应按back键的事件
builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
return true;
}
@Override
public boolean onJsBeforeUnload(WebView view, String url,
String message, JsResult result) {
return super.onJsBeforeUnload(view, url, message, result);
}
/**
* 覆盖默认的window.confirm展示界面,避免title里显示为“:来自file:////”
*/
@Override
public boolean onJsConfirm(WebView view, String url, String message,
final JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("对话框")
.setMessage(message)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
});
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
result.cancel();
}
});
// 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
Log.v("onJsConfirm", "keyCode==" + keyCode + "event=" + event);
return true;
}
});
AlertDialog dialog = builder.create();
dialog.show();
return true;
}
/**
* 覆盖默认的window.prompt展示界面,避免title里显示为“:来自file:////”
* window.prompt('请输入您的域名地址', '618119.com');
*/
@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, final JsPromptResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("对话框").setMessage(message);
final EditText et = new EditText(view.getContext());
et.setSingleLine();
et.setText(defaultValue);
builder.setView(et)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm(et.getText().toString());
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
});
// 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
Log.v("onJsPrompt", "keyCode==" + keyCode + "event=" + event);
return true;
}
});
AlertDialog dialog = builder.create();
dialog.show();
return true;
}
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
@Override
public void onRequestFocus(WebView view) {
super.onRequestFocus(view);
}
@Override
public void onGeolocationPermissionsShowPrompt(final String origin,
final GeolocationPermissions.Callback callback) {
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
builder.setTitle("地理位置");
builder.setMessage("是否允许获取地理位置")
.setCancelable(true).setPositiveButton("允许", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// origin, allow, remember
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Android WebView中调用相机拍照、相册、录制视频 (113个子文件)
gradlew.bat 2KB
taskHistory.bin 1.88MB
classAnalysis.bin 206KB
fileHashes.bin 133KB
taskHistory.bin 23KB
outputFiles.bin 21KB
resourceHashesCache.bin 18KB
last-build.bin 1B
.gitignore 203B
.gitignore 7B
build.gradle 1KB
build.gradle 550B
settings.gradle 15B
gradlew 5KB
app.iml 15KB
WebViewWithCamera.iml 871B
gradle-wrapper.jar 53KB
MyWebChromeClient.java 14KB
JavaCameraUtil.java 5KB
MediaUtility.java 5KB
MainActivity.java 1KB
ExampleInstrumentedTest.java 742B
FileProvider7.java 739B
ExampleUnitTest.java 390B
fileContent.lock 17B
fileHashes.lock 17B
javaCompile.lock 17B
buildOutputCleanup.lock 17B
taskHistory.lock 17B
ic_launcher_round.png 15KB
ic_launcher_round.png 10KB
ic_launcher.png 9KB
ic_launcher_round.png 7KB
ic_launcher.png 6KB
ic_launcher_round.png 5KB
ic_launcher.png 4KB
ic_launcher.png 3KB
ic_launcher_round.png 3KB
ic_launcher.png 2KB
proguard-rules.pro 751B
gradle.properties 728B
local.properties 403B
gradle-wrapper.properties 233B
cache.properties 52B
gc.properties 0B
gc.properties 0B
gradle_models.ser 144KB
build_file_checksums.ser 538B
workspace.xml 221KB
ic_launcher_background.xml 5KB
misc.xml 5KB
ic_launcher_foreground.xml 2KB
AndroidManifest.xml 1KB
Gradle__com_android_support_test_espresso_espresso_idling_resource_3_0_2_aar.xml 766B
Gradle__com_android_support_test_espresso_espresso_core_3_0_2_aar.xml 711B
Gradle__com_android_support_support_media_compat_28_0_0_aar.xml 702B
Gradle__com_android_support_swiperefreshlayout_28_0_0_aar.xml 694B
Gradle__com_android_support_appcompat_v7_28_0_0_rc02_aar.xml 690B
Gradle__com_android_support_coordinatorlayout_28_0_0_aar.xml 690B
Gradle__android_arch_lifecycle_livedata_core_1_1_1_aar.xml 688B
Gradle__com_android_support_support_fragment_28_0_0_aar.xml 686B
Gradle__com_android_support_support_compat_28_0_0_aar.xml 678B
Gradle__cn_yongxing_ActivityResult_1_0_3_aar.xml 672B
Gradle__com_android_support_drawerlayout_28_0_0_aar.xml 670B
Gradle__android_arch_lifecycle_viewmodel_1_1_1_aar.xml 669B
Gradle__android_arch_lifecycle_livedata_1_1_1_aar.xml 664B
Gradle__com_android_support_test_monitor_1_0_2_aar.xml 663B
Gradle__android_arch_lifecycle_runtime_1_1_1_aar.xml 659B
Gradle__com_android_support_test_runner_1_0_2_aar.xml 658B
Gradle__android_arch_core_runtime_1_1_1_aar.xml 648B
Gradle__com_android_support_print_28_0_0_aar.xml 642B
gradle.xml 626B
Gradle__org_hamcrest_hamcrest_integration_1_3_jar.xml 576B
activity_main.xml 565B
runConfigurations.xml 564B
Gradle__org_hamcrest_hamcrest_library_1_3_jar.xml 555B
Gradle__android_arch_lifecycle_common_1_1_1_jar.xml 546B
Gradle__org_hamcrest_hamcrest_core_1_3_jar.xml 541B
Gradle__com_squareup_javawriter_2_1_1_jar.xml 536B
Gradle__com_android_support_animated_vector_drawable_28_0_0_rc02_aar.xml 532B
Gradle__android_arch_core_common_1_1_1_jar.xml 531B
Gradle__com_android_support_support_vector_drawable_28_0_0_rc02_aar.xml 529B
Gradle__javax_inject_javax_inject_1_jar.xml 526B
file_paths.xml 519B
Gradle__com_android_support_localbroadcastmanager_28_0_0_aar.xml 508B
Gradle__net_sf_kxml_kxml2_2_3_0_jar.xml 508B
Gradle__com_android_support_constraint_constraint_layout_1_1_3_aar.xml 504B
Gradle__com_android_support_versionedparcelable_28_0_0_aar.xml 502B
Gradle__com_android_support_asynclayoutinflater_28_0_0_aar.xml 502B
Gradle__com_android_support_support_core_utils_28_0_0_aar.xml 499B
Gradle__com_android_support_slidingpanelayout_28_0_0_aar.xml 496B
Gradle__com_android_support_support_core_ui_28_0_0_aar.xml 490B
Gradle__junit_junit_4_12_jar.xml 485B
Gradle__com_android_support_cursoradapter_28_0_0_aar.xml 484B
Gradle__com_android_support_interpolator_28_0_0_aar.xml 481B
Gradle__com_android_support_documentfile_28_0_0_aar.xml 481B
Gradle__com_android_support_customview_28_0_0_aar.xml 475B
Gradle__com_android_support_support_v4_28_0_0_aar.xml 475B
Gradle__com_android_support_viewpager_28_0_0_aar.xml 472B
Gradle__com_android_support_loader_28_0_0_aar.xml 463B
共 113 条
- 1
- 2
资源评论
油炸电视剧
- 粉丝: 1
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功