一、H5如何使用input标签

   H5使用 input标签做文件选择样例如下:

                            

分别在iOS和android 自创建webview里面测试,结论如下:

(1)这三种方式在android上都没有反应

(2)第1个方式弹出选择框,有三项选择分别是拍照或视频、相册、浏览(会打开文件目录)。

        第2个方式在iOS任何系统,弹出选择框,有两项选择分别是拍照、相册

        第3个方式在iOS任何系统,直接打开相机。

二、android 如何支持

android需要自行实现,现在我们先介绍实现2、3两种。webview 自定义WebChromeClient的以下方法:

//API < 21(Android 5.0)回调此方法public void openFileChooser(ValueCallback uploadFile, String acceptType, String capture) {            mUploadMessage = uploadFile;            if (acceptType.equals("image/*")) {                if (capture.equalsIgnoreCase("camera")){                    SystemCamera camera = new SystemCamera(mActivity,AcMobileWebGapClass.this);                    camera.inputAcceptImageCamera();                    mCaptureUri =camera.getmUri();                }else {                    Intent intent = new Intent(mActivity.getApplicationContext(), PhotoActivity.class);                    mActivity.startActivityForResult(intent, PhotoActivity.PHOTO_ACTIVITY_CODE);                }            }        }        //API >= 21(Android 5.0)回调此方法        @Override        public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {                mUploadCallbackAboveL = filePathCallback;                String[] acceptTypes = fileChooserParams.getAcceptTypes();                boolean capture = fileChooserParams.isCaptureEnabled();                if (acceptTypes.length > 0 && acceptTypes[0].equals("image/*")) {                   if (capture){                       SystemCamera camera = new SystemCamera(mActivity,AcMobileWebGapClass.this);                       camera.inputAcceptImageCamera();                       mCaptureUri =camera.getmUri();                   }else {                       Intent intent = new Intent(mActivity.getApplicationContext(), PhotoActivity.class);                       mActivity.startActivityForResult(intent, PhotoActivity.PHOTO_ACTIVITY_CODE);                   }                    return true;                }            }            return super.onShowFileChooser(webView, filePathCallback, fileChooserParams);        }

第2方式就直接打开相机。 第3方式弹出选择框让用户选择拍照 或者 相册选择。

在activity处理结果

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);            switch (requestCode){                //                case PhotoActivity.PHOTO_ACTIVITY_CODE:                    if (data != null && resultCode == RESULT_OK){                        Uri[] results = new Uri[]{ Uri.parse(data.getStringExtra("result"))};                        if (mAcmobileWebview.mUploadCallbackAboveL != null){                            mAcmobileWebview.mUploadCallbackAboveL.onReceiveValue(results);                            mAcmobileWebview.mUploadCallbackAboveL= null;                        }else if (mAcmobileWebview.mUploadMessage !=null){                            mAcmobileWebview.mUploadMessage.onReceiveValue(Uri.parse(data.getStringExtra("result")));                            mAcmobileWebview.mUploadMessage= null;                        }                    }else{                        if (mAcmobileWebview.mUploadCallbackAboveL != null){                            mAcmobileWebview.mUploadCallbackAboveL.onReceiveValue(null);                            mAcmobileWebview.mUploadCallbackAboveL= null;                        }else if (mAcmobileWebview.mUploadMessage !=null){                            mAcmobileWebview.mUploadMessage.onReceiveValue(null);                            mAcmobileWebview.mUploadMessage= null;                        }                    }                    break;                case 203:                    if (resultCode == RESULT_OK && mAcmobileWebview.mCaptureUri != null) {                        Uri[] results = new Uri[]{ mAcmobileWebview.mCaptureUri};                        if (mAcmobileWebview.mUploadCallbackAboveL != null){                            mAcmobileWebview.mUploadCallbackAboveL.onReceiveValue(results);                            mAcmobileWebview.mUploadCallbackAboveL= null;                        }else if (mAcmobileWebview.mUploadMessage !=null){                            mAcmobileWebview.mUploadMessage.onReceiveValue(Uri.parse(data.getStringExtra("result")));                            mAcmobileWebview.mUploadMessage= null;                        }                    }else {                        if (mAcmobileWebview.mUploadCallbackAboveL != null){                            mAcmobileWebview.mUploadCallbackAboveL.onReceiveValue(null);                            mAcmobileWebview.mUploadCallbackAboveL= null;                        }else if (mAcmobileWebview.mUploadMessage !=null){                            mAcmobileWebview.mUploadMessage.onReceiveValue(null);                            mAcmobileWebview.mUploadMessage= null;                        }                    }                    break;                default:                    break;            }    }

第1方式可以打开手机文件管理目录,这个后续再写。

 

 

 

 

更多相关文章

  1. Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络
  2. Android之手机定位方式(GPS定位,网络定位,基站定位)
  3. Android中关于画布Skew,斜切操作的计算方式
  4. Android(安卓)6.0以上权限拒绝打开权限设置界面的解决方法
  5. Android高斯模糊(无需任何三方框架)的实现思路,Android多种截图方式
  6. App实战:移动端Mock Api的几种方式
  7. Android(安卓)一起来看看知乎开源的图片选择库
  8. Android(安卓)面试的重点要点题,快来了解了解
  9. Android多进程间采用AIDL方式进行通信简单DEMO

随机推荐

  1. Android 定义全局LOG打印日志,并显示调用
  2. android之luncher滑动效果
  3. Android 全屏无标题详解
  4. android 检测应用程序信息
  5. android(5) 等待窗口
  6. android 添加和删除快捷方式
  7. Android 监听返回键|您确定要退出吗
  8. 流程图控件GoJS内置GraphObject类各指数
  9. Mac端完全删除Android Studio
  10. Android 检查当前是否已经连接上 Interne