Android WebView 上传各种文件(包括拍照 录像 录音 文件 音乐 等,用到图片或拍照的)
2017-09-28 16:36
856 查看
我也是从网上扒下来的,经过多次实验,找到了个好用的。网上能搜到最多的也就是这个解决方案,我英文不好,也没仔细研究,但大多数都是出自这:
http://stackoverflow.com/questions/4944102/android-webview-file-input-field-filechooser-doesnt-show-up
我终于google到了个好用的方案:http://www.cnblogs.com/sipher/archive/2012/09/05/2672361.html
android 为了安全考虑把webview 中的上传文件给默认去除了。不过可以自己通过实现接口,自己完成这个功能。
首先用webview的setWebChromeClient(WebChromeClient wcc)方法,通过这个方法也能让浏览器支持js的alert方法。
WebChromeClient 类要自己实现,可以用匿名类,也可以用普通类,咱们就用内部类吧。
声明并实现了这个类后就可以用webView 的setWebChromeClient(new WebChromeClient())方法加入自己实现的接口了。
不过上面实现的内部类中有几个方法还要使用,是自己实现的方法。放在内部类里也行,放外面也行,都随意,不过要是写在内部类里的话,String mCameraFilePath;这个属性要声明成activity的属性。
http://stackoverflow.com/questions/4944102/android-webview-file-input-field-filechooser-doesnt-show-up
我终于google到了个好用的方案:http://www.cnblogs.com/sipher/archive/2012/09/05/2672361.html
android 为了安全考虑把webview 中的上传文件给默认去除了。不过可以自己通过实现接口,自己完成这个功能。
首先用webview的setWebChromeClient(WebChromeClient wcc)方法,通过这个方法也能让浏览器支持js的alert方法。
WebChromeClient 类要自己实现,可以用匿名类,也可以用普通类,咱们就用内部类吧。
private class MyWebChromeClient extends WebChromeClient { //这个重新的方法是为了让js支持alert。不需要的可以去掉 @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } // For Android > 4.1.1 public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) { openFileChooser(uploadMsg, acceptType); } // For Android 3.0+ public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) { if (mUploadMessage != null) return; mUploadMessage = uploadMsg; startActivityForResult(createDefaultOpenableIntent(), MainActivity.FILECHOOSER_RESULTCODE); } // For Android < 3.0 public void openFileChooser(ValueCallback<Uri> uploadMsg) { openFileChooser( uploadMsg, "" ); } }
声明并实现了这个类后就可以用webView 的setWebChromeClient(new WebChromeClient())方法加入自己实现的接口了。
webView.setWebChromeClient(new MyWebChromeClient());
不过上面实现的内部类中有几个方法还要使用,是自己实现的方法。放在内部类里也行,放外面也行,都随意,不过要是写在内部类里的话,String mCameraFilePath;这个属性要声明成activity的属性。
private Intent createDefaultOpenableIntent() { // Create and return a chooser with the default OPENABLE // actions including the camera, camcorder and sound // recorder where available. Intent i = new Intent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("*/*"); Intent chooser = createChooserIntent(createCameraIntent(), createCamcorderIntent(), createSoundRecorderIntent()); chooser.putExtra(Intent.EXTRA_INTENT, i); return chooser; } private Intent createChooserIntent(Intent... intents) { Intent chooser = new Intent(Intent.ACTION_CHOOSER); chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents); chooser.putExtra(Intent.EXTRA_TITLE, "File Chooser"); return chooser; } //在原作者代码里我发现这个变量会被下面的方法使用,但他用的是局部变量,我设成属性后就好了 String mCameraFilePath; private Intent createCameraIntent() { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File externalDataDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DCIM); File cameraDataDir = new File(externalDataDir.getAbsolutePath() + File.separator + "browser-photos"); cameraDataDir.mkdirs(); mCameraFilePath = cameraDataDir.getAbsolutePath() + File.separator + System.currentTimeMillis() + ".jpg"; cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mCameraFilePath))); return cameraIntent; } private Intent createCamcorderIntent() { return new Intent(MediaStore.ACTION_VIDEO_CAPTURE); } private Intent createSoundRecorderIntent() { return new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); }
相关文章推荐
- Android WebView 上传各种文件(包括拍照 录像 录音 文件 音乐 等,用到图片或拍照的,可以参考下)
- Android WebView 选择图片并上传(调用相机拍照/相册/选择文件)
- Android WebView-H5交互上传文件(包括图片)
- android 通过webView上传文件给服务器(包括拍照)
- android使用webview上传文件(支持相册和拍照)
- android使用webview上传文件(支持相册和拍照)
- Android webview h5 图片,拍照,视频上传
- android使用webview上传文件(支持相册和拍照)
- android使用webview上传文件(支持相册和拍照)
- Android - 图片的处理,触摸监听事件,音乐播放,SoundPool,VideoView,视频播放,SurfaceView,拍照录像,传感器
- Android Webview实现图片、文件上传及启动相机功能
- android webview图片文件上传兼容性问题——上传控件点击无效的解决办法
- android使用webview上传文件(图片)
- android webview图片文件上传——上传控件点击无效的解决办法
- Android webview 关于拍照上传图片的解决方法
- android使用webview上传文件(支持相册和拍照),支持最高6.0安卓系统(改进版)
- 在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器
- android使用webview上传文件(支持相册和拍照)
- Android WebView关于图片/文件上传
- Android Webview实现图片、文件上传及启动相机功能