Android Webview实现图片、文件上传及启动相机功能

来源:互联网 发布:codol激光和握把数据 编辑:程序博客网 时间:2024/05/16 15:24

直接上代码,体会Webview强大的功能。

webView.setWebChromeClient(webChromeClient);

private String mCameraFilePath = null;private ValueCallback<Uri> mUploadMessage;// 表单的数据信息private final static int FILECHOOSER_RESULTCODE = 1;// 表单的结果回调</span>
private WebChromeClient webChromeClient = new WebChromeClient() {// For Android 3.0+public void openFileChooser(ValueCallback<Uri> uploadMsg) {if (uploadMsg == null) {return;}mUploadMessage = uploadMsg;Intent i = new Intent(Intent.ACTION_GET_CONTENT);i.addCategory(Intent.CATEGORY_OPENABLE);i.setType("image/*");activity.startActivityForResult(Intent.createChooser(i, "File Chooser"),FILECHOOSER_RESULTCODE);}// For Android 3.0+public void openFileChooser(ValueCallback uploadMsg, String acceptType) {if (uploadMsg == null) {return;}mUploadMessage = uploadMsg;Intent i = new Intent(Intent.ACTION_GET_CONTENT);i.addCategory(Intent.CATEGORY_OPENABLE);i.setType("*/*");activity.startActivityForResult(Intent.createChooser(i, "File Browser"),FILECHOOSER_RESULTCODE);}// For Android 4.1public void openFileChooser(ValueCallback<Uri> uploadMsg,String acceptType, String capture) {if (uploadMsg == null) {return;}mUploadMessage = uploadMsg;Intent i = new Intent(Intent.ACTION_GET_CONTENT);i.addCategory(Intent.CATEGORY_OPENABLE);i.setType("image/*");activity.startActivityForResult(Intent.createChooser(i, "File Chooser"),FILECHOOSER_RESULTCODE);}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;}private Intent createCameraIntent() {Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);File externalDataDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);System.out.println("externalDataDir:" + externalDataDir);File cameraDataDir = new File(externalDataDir.getAbsolutePath()+ File.separator + "browser-photo");cameraDataDir.mkdirs();mCameraFilePath = cameraDataDir.getAbsolutePath() + File.separator+ System.currentTimeMillis() + ".jpg";System.out.println("mcamerafilepath:" + mCameraFilePath);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);}};


public void onActivityResult(int requestCode, int resultCode, Intent intent) {if (requestCode == FILECHOOSER_RESULTCODE) {if (null == mUploadMessage)return;Uri result = intent == null || resultCode != Activity.RESULT_OK ? null: intent.getData();if (result == null && intent == null&& resultCode == Activity.RESULT_OK) {File cameraFile = new File(mCameraFilePath);if (cameraFile.exists()) {result = Uri.fromFile(cameraFile);activity.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, result));}}mUploadMessage.onReceiveValue(result);mUploadMessage = null;} }

技术交流QQ群:6399844

3 0