android Webview打开、上传本地图片的解决方案 支持到5.0

主要代码:
// 设置WebChromeClient
		mWebView.setWebChromeClient(new WebChromeClient() {
			
			 
			/***************** android中使用WebView来打开本机的文件选择器 *************************/  
			// <input type="file" name="fileField" id="fileField" />
			// Android > 4.1.1    4.4.4也可以   
			@SuppressWarnings("static-access")
			public void openFileChooser(ValueCallback<Uri> uploadMsg,String acceptType, String capture) {
			        mUploadMessage = uploadMsg;
			        startActivityForResult(createDefaultOpenableIntent(),FILECHOOSER_RESULTCODE);
			}
			// 3.0 +
			@SuppressWarnings("static-access")
			public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
			       mUploadMessage = uploadMsg;
			       startActivityForResult(createDefaultOpenableIntent(),FILECHOOSER_RESULTCODE);
			}
			// Android < 3.0
			@SuppressWarnings("static-access")
			public void openFileChooser(ValueCallback<Uri> uploadMsg) {
			       mUploadMessage = uploadMsg;
			       startActivityForResult(createDefaultOpenableIntent(),FILECHOOSER_RESULTCODE);
			}
			private Intent createDefaultOpenableIntent() {
					Intent i = new Intent(Intent.ACTION_GET_CONTENT);
					i.addCategory(Intent.CATEGORY_OPENABLE);
					i.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
					Intent chooser = createChooserIntent(createCameraIntent());
			        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, "选择图片");
			        return chooser;
			}
			@SuppressWarnings("static-access")
			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 + "515aaa");
					cameraDataDir.mkdirs();
					String mCameraFilePath1 = cameraDataDir.getAbsolutePath()
							+ File.separator + System.currentTimeMillis() + ".jpg";
					mCameraFilePath = mCameraFilePath1;
					cameraIntent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
					cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,
							Uri.fromFile(new File(mCameraFilePath)));
					return cameraIntent;
			}
			
			//Android 5.0+
		    @Override
		    @SuppressLint("NewApi")
		    public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
		        if (mUploadMessageForAndroid5 != null) {
		        	mUploadMessageForAndroid5.onReceiveValue(null);
		        }
//		        CLog.i("UPFILE", "file chooser params:" + fileChooserParams.toString());
		        mUploadMessageForAndroid5 = filePathCallback;
		        Intent i = new Intent(Intent.ACTION_GET_CONTENT);
		        i.addCategory(Intent.CATEGORY_OPENABLE);
		        if (fileChooserParams != null && fileChooserParams.getAcceptTypes() != null&& fileChooserParams.getAcceptTypes().length > 0) {
		            i.setType(fileChooserParams.getAcceptTypes()[0]);
		        } else {
		            i.setType("*/*");
		        }
		        startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE_FOR_ANDROID_5);
		        return true;
		    }
			
		});
>------------------------------------------------------分割---------------------------------------------------------------------------
这是回传照片处理的代码

<pre name="code" class="java">@Override
	protected void onActivityResult(int requestCode, int resultCode,
			Intent intent) {
		if (requestCode == FILECHOOSER_RESULTCODE) {
			if (null == mUploadMessage)
				return;
			Uri result = intent == null || resultCode != RESULT_OK ? null: intent.getData();
			if (intent == null && mCameraFilePath != "") {
				result =getImageContentUri(this,
						new File(mCameraFilePath));
			}
			mUploadMessage.onReceiveValue(result);
			mUploadMessage = null;
		} else if (requestCode == FILECHOOSER_RESULTCODE_FOR_ANDROID_5){     //安卓5.0以上
			if (null == mUploadMessageForAndroid5)
				return;
				Uri result = (intent == null || resultCode != RESULT_OK) ? null: intent.getData();
				if (result != null) {
                mUploadMessageForAndroid5.onReceiveValue(new Uri[]{result});
				} else {
					mUploadMessageForAndroid5.onReceiveValue(new Uri[]{});
				}
				mUploadMessageForAndroid5 = null;
		}
	}


	/**
	 * 拍照得到的图片处理
	 */
	public Uri getImageContentUri(Context context, java.io.File imageFile) {
        String filePath = imageFile.getAbsolutePath();
        Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,new String[] { MediaStore.Images.Media._ID },
                                                                                        MediaStore.Images.Media.DATA + "=? ",
                                                                                        new String[] { filePath }, null);
       if (cursor != null && cursor.moveToFirst()) {
       int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
       Uri baseUri = Uri.parse("content://media/external/images/media");
       return Uri.withAppendedPath(baseUri, "" + id);
       } else {
           if (imageFile.exists()) {
          	 ContentValues values = new ContentValues();
          	 values.put(MediaStore.Images.Media.DATA, filePath);
          	 return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
               	} else {
               		return null;
               	}
       }
	}

 

 

 

 

 

</pre><pre name="code" class="java">
</pre><pre name="code" class="java">

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值