android studio 打包webview 5.0文件上传问题
16lz
2021-01-26
之前在eclipse上打包的项目在5.0的手机上正常,这俩天项目转到android studio 上,5.0之上的系统文件上传反而无反应,之后根据网络资料整理解决,代码如下
// 5.0 +文件上传@Overridepublic boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {if (mUploadMessages != null) {//mUploadMessages.onReceiveValue(null);//这行代码会导致文件只能上传一次,需注意mUploadMessages = null;}mUploadMessages = filePathCallback;Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);if (takePictureIntent.resolveActivity(mMainActivity.getPackageManager()) != null) {// Create the File where the photo should goFile photoFile = null;try {photoFile = createImageFile();takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);} catch (IOException ex) {// Error occurred while creating the FileLog.e("WebViewSetting", "Unable to create Image File", ex);}// Continue only if the File was successfully createdif (photoFile != null) {mCameraPhotoPath = "file:" + photoFile.getAbsolutePath();takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photoFile));} else {takePictureIntent = null;}}Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);contentSelectionIntent.setType("image/*");Intent[] intentArray;if (takePictureIntent != null) {intentArray = new Intent[]{takePictureIntent};} else {intentArray = new Intent[0];}Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);mMainActivity.startActivityForResult(chooserIntent, mMainActivity.INPUT_FILE_REQUEST_CODE);return true;}
/** * 返回文件选择 */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); if (requestCode == FILECHOOSER_RESULTCODE) { mUploadMessage = chromeClient.getmUploadMessage(); if (null == mUploadMessage) return; Uri result = intent == null || resultCode != RESULT_OK ? null : intent.getData(); mUploadMessage.onReceiveValue(result); mUploadMessage = null; }else if(requestCode == INPUT_FILE_REQUEST_CODE){ mUploadMessages = chromeClient.getmUploadMessage2(); String mCameraPhotoPath = chromeClient.getCameraPhotoPath(); if (null == mUploadMessages) return; // 5.0的回调 Uri[] results = null; // Check that the response is a good one if (resultCode == Activity.RESULT_OK) { if (intent == null) { // If there is not data, then we may have taken a photo if (mCameraPhotoPath != null) { results = new Uri[]{Uri.parse(mCameraPhotoPath)}; } } else { String dataString = intent.getDataString(); ClipData clipData = intent.getClipData(); if(clipData != null){ results = new Uri[clipData.getItemCount()]; for (int i = 0; i < clipData.getItemCount(); i++) { ClipData.Item item = clipData.getItemAt(i); results[i] = item.getUri(); } } if (dataString != null) { results = new Uri[]{Uri.parse(dataString)}; } } } mUploadMessages.onReceiveValue(results); mUploadMessages = null; } else { super.onActivityResult(requestCode, resultCode, intent); return; } }
其他例如4.1+的系统版本(包含4.4),部分机型也是无法上传文件,尚未解决,解决后更新,如有了解的朋友望不吝赐教。
更多相关文章
- GreenDao数据库升级解决方案
- Android使用include标签无法设置具体位置的解决
- Android(安卓)OpenGL探索之纯色背景绘制
- Android获取验证码倒计时实现代码
- Android向node.js编写的服务器发送数据并接收请求
- ANDROID 设置状态栏与标题背景颜色一致
- Android(安卓)4.2充电画面关键代码分析
- Eclipse+CDT+GDB调试Android(安卓)NDK程序
- android在代码中修改view的布局