在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器
来源:互联网 发布:房屋租赁java 编辑:程序博客网 时间:2024/06/05 23:06
最近做的一个项目中,有这样一个要求,在浏览器中调用系统的拍照功能或者选择文件,然后将文件上传到服务器,类似修改头像。 简单而言,就是在一个html页面中有这样一段代码 <input class="filePrew" type="file" capture="camera" accept="image/*" name="image">
刚开始的时候,没有感觉很难的,因为在UC浏览器、系统自带的浏览器中都可以进行拍照/文件管理器选择,可是在自己所写的Activity中却不行。后来实在是没有思路了,就在网上找了一下,发现要 实现这种功能,都是在webview的WebChromeClient中覆盖掉openFileChooser方法,注意openFileChooser方法在WebChromeClient中有@hide标记。这里只管重写即可,下面将主要代码贴出来,做个记录
private ValueCallback<Uri> mUploadFile;/**拍照/选择文件请求码*/private static final int REQUEST_UPLOAD_FILE_CODE = 12343;private void setWebChromeClient(){if (null != mMainWebView){mMainWebView.setWebChromeClient(new WebChromeClient(){// Andorid 4.1+public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture){openFileChooser(uploadFile);}// Andorid 3.0 +public void openFileChooser(ValueCallback<Uri> uploadFile, String acceptType){openFileChooser(uploadFile);}// Android 3.0public void openFileChooser(ValueCallback<Uri> uploadFile){// Toast.makeText(WebviewActivity.this, "上传文件/图片",Toast.LENGTH_SHORT).show();mUploadFile = uploadFile;startActivityForResult(Intent.createChooser(createCameraIntent(), "Image Browser"), REQUEST_UPLOAD_FILE_CODE);}});}}private Intent createCameraIntent(){Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//拍照//=======================================================Intent imageIntent = new Intent(Intent.ACTION_GET_CONTENT);//选择图片文件imageIntent.setType("image/*");//=======================================================return cameraIntent;}//最后在OnActivityResult中接受返回的结果protected void onActivityResult(int requestCode, int resultCode, Intent data){if (requestCode == REQUEST_UPLOAD_FILE_CODE && resultCode == RESULT_OK){if (null == mUploadFile){return;}Uri result = (null == data) ? null : data.getData();if (null != result){ContentResolver resolver = this.getContentResolver();String[] columns = { MediaStore.Images.Media.DATA };Cursor cursor = resolver.query(result, columns, null, null, null);cursor.moveToFirst();int columnIndex = cursor.getColumnIndex(columns[0]);String imgPath = cursor.getString(columnIndex);System.out.println("imgPath = " + imgPath);if (null == imgPath){return;}File file = new File(imgPath); //将图片处理成大小符合要求的文件result = Uri.fromFile(handleFile(file));mUploadFile.onReceiveValue(result);mUploadFile = null;}}super.onActivityResult(requestCode, resultCode, data);}/**处理拍照/选择的文件*/private File handleFile(File file){DisplayMetrics dMetrics = getResources().getDisplayMetrics();BitmapFactory.Options options = new Options();options.inJustDecodeBounds = true; BitmapFactory.decodeFile(file.getAbsolutePath(), options);int imageWidth = options.outWidth;int imageHeight = options.outHeight;System.out.println(" imageWidth = " + imageWidth + " imageHeight = " + imageHeight);int widthSample = (int) (imageWidth / (dMetrics.density * 90));int heightSample = (int) (imageHeight / (dMetrics.density * 90));System.out.println("widthSample = " + widthSample + " heightSample = " + heightSample);options.inSampleSize = widthSample < heightSample ? heightSample : widthSample;options.inJustDecodeBounds = false;Bitmap newBitmap = BitmapFactory.decodeFile(file.getAbsolutePath(), options);System.out.println("newBitmap.size = " + newBitmap.getRowBytes() * newBitmap.getHeight());File handleFile = new File(file.getParentFile(), "upload.png");try{if (newBitmap.compress(CompressFormat.PNG, 50, new FileOutputStream(handleFile))){System.out.println("保存图片成功");}}catch (FileNotFoundException e){e.printStackTrace();}return handleFile;}
这样就可以在WebView中上传文件了。记得要添加相应的权限!
参考:http://developer.android.com/about/versions/android-3.0.html
http://blog.sina.com.cn/s/blog_5749ead90101clrn.html
0 0
- 在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器
- 在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器
- 在Android中通过WebView调用相机拍照/选择文件
- Android WebView 选择图片并上传(调用相机拍照/相册/选择文件)
- android 通过webView上传文件给服务器(包括拍照)
- 安卓实现拍照、在手机中选择图片通过webservice上传图片到服务器
- 安卓实现拍照、在手机中选择图片通过webservice上传图片到服务器
- Android WebView中打开相机拍照和选择相册
- Android通过WebView选择文件上传(支持直接调起相机等应用)
- Android通过WebView选择文件上传(支持直接调起相机等应用)
- Android拍照选择图片通过webservice上传图片到到服务器
- HTML5拍照上传图片&Phonegap封装HTML5调用Android相机拍照上传到PHP端
- Android 拍照上传与选择文件上传至服务器
- Android调用安卓相机拍照上传
- android 选择图片拍照并剪切照片上传到服务器
- Android上传文件到服务器(2)--从相机上传
- Android调用系统相机拍照,从图库中选择照片,调用系统摄像机录像
- android通过servlet上传文件到服务器
- Go中调用dll示例
- 内容分发网络CDN自结
- android新手,开发环境配置
- 关于地图学的一些基础知识
- jQuery API .index()
- 在Android浏览器中通过WebView调用相机拍照/选择文件 上传到服务器
- squid实现透明网关若干经验总结
- 学习笔记-轻量级Java EE:模式--单例模式
- tomcat 301与java301
- vc中多线程注意事项
- FTP、FTPS和SFTP
- Tomcat给我的java.lang.OutOfMemoryError: PermGen
- IOS NSIndexSet的使用小节
- IOS多线程编程之Grand Central Dispatch(GCD)介绍和使用