先上html界面的代码,放在assets里面就可以了,我也不太会html,所以随便写了点

<html lang="en"><head>    <meta charset="UTF-8">    <meta name="Generator" content="EditPlus®">    <meta name="Author" content="">    <meta name="Keywords" content="">    <meta name="Description" content="">    <title>H5页面上传手机照片title>head><body><script>function previewFile1() {        var img = document.getElementById("preview1");        // 仅限上传单张图片        var file =document.getElementById("demo1").files[0];        var text2 = document.getElementById("text2");        var reader  = new FileReader();        reader.addEventListener("load", function () {                img.src = reader.result;  // 存储在本地的图片的base64编码        }, false);        if (file) {          reader.readAsDataURL(file);        }     }     function previewFile2() {        var img2 = document.getElementById("preview2");        // 仅限上传单张图片        var file2 = document.getElementById("demo2").files[0];        var reader2  = new FileReader();        reader2.addEventListener("load", function () {                img2.src = reader2.result;  // 存储在本地的图片的base64编码        }, false);        if (file2) {          reader2.readAsDataURL(file2);        }     }script><form action="">    <p>图片1: <input type="file" id="demo1" name="uploadImg1" onchange="previewFile1()"/>p>    <p>图片2: <input type="file" id="demo2" name="uploadImg2" onchange="previewFile2()"/>p>    <img id="preview1" src="" width="100" height="100"/>    <br>    <img id="preview2" src="" width="100" height="100"/>form>body>html>

然后来看看java怎么做
主要是对webview进行操作

public void initWebView() {        WebView webview = (WebView) findViewById(R.id.act_certification_webview);        WebSettings webSettings = webview.getSettings();        //设置WebView属性,能够执行Javascript脚本        webSettings.setJavaScriptEnabled(true);        //设置可以访问文件        webSettings.setAllowFileAccess(true);        //设置支持缩放        webSettings.setBuiltInZoomControls(true);        webview.loadUrl("file:///android_asset/interact.html");        webview.setWebChromeClient(new WebChromeClient() {            @Override            public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, FileChooserParams fileChooserParams) {//5.0+                showDialog();                mFilePathCallback = filePathCallback;                return true;            }            //openFileChooser 方法是隐藏方法            public void openFileChooser(ValueCallback uploadMsg, String acceptType, String capture) {// android 系统版本>4.1.1                showDialog();                mFilePathCallback = uploadMsg;            }            public void openFileChooser(ValueCallback uploadMsg) {//android 系统版本<3.0                showDialog();                mFilePathCallback = uploadMsg;            }            public void openFileChooser(ValueCallback uploadMsg, String acceptType) {//android 系统版本3.0+                showDialog();                mFilePathCallback = uploadMsg;            }        });    }

拍照和相册选择的弹窗

 private void showDialog() {        NiceDialog                .init()                .setLayoutId(R.layout.dialog_choose_photo)                .setConvertListener(new ViewConvertListener() {                    @Override                    public void convertView(ViewHolder holder, final BaseNiceDialog dialog) {                        holder.setOnClickListener(R.id.dialog_choose_photo_takePhoto, new View.OnClickListener() {                            @Override                            public void onClick(View v) {                                dialog.dismiss();                                autoObtainCameraPermission(1);                            }                        });                        holder.setOnClickListener(R.id.dialog_choose_photo_gallery, new View.OnClickListener() {                            @Override                            public void onClick(View v) {                                dialog.dismiss();                                autoObtainStoragePermission(1);                            }                        });                    }                })                .setDimAmount(0.5f)                .setShowBottom(false)                .setAnimStyle(R.style.popwindow_center_style)                .setMargin(30)                .setOutCancel(true)                .show(getSupportFragmentManager());    }

先检查是否有权限

    public void autoObtainCameraPermission(int type) {        this.type = type;        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED                || ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {//                ToastUtils.showToastCenter("您已经拒绝过一次");            }            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, CAMERA_PERMISSIONS_REQUEST_CODE);        } else {//有权限直接调用系统相机拍照            if (CommonUtil.hasSdcard()) {                imageUri = Uri.fromFile(fileUri);                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)                    imageUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileprovider", fileUri);//通过FileProvider创建一个content类型的Uri                PhotoUtils.takePicture(this, imageUri, CODE_CAMERA_REQUEST);            } else {                ToastUtils.showToastCenter("设备没有SD卡!");            }        }    }

收到照片的回调

 @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        if (resultCode == RESULT_OK) {            if (requestCode == CODE_CAMERA_REQUEST) {//                cropImageUri = Uri.fromFile(fileCropUri);//                PhotoUtils.cropImageUri(this, imageUri, cropImageUri, 1, 1, output_X, output_Y, CODE_RESULT_REQUEST);                Bitmap bitmapFromUri = PhotoUtils.getBitmapFromUri(imageUri, this);                int bitmapDegree = getBitmapDegree(imageUri.getPath());                Bitmap bitmap = rotateBitmapByDegree(bitmapFromUri, bitmapDegree);                if (bitmap == null) {                    showToastBottom("对不起,图片不正确!");                    return;                }                try {                    File fileIcon = new File(Environment.getExternalStorageDirectory().getPath() + "/" + SystemClock.currentThreadTimeMillis() + "4.jpg");                    saveBitmapToUri(bitmap, fileIcon.getAbsolutePath());                    getbitmap(type, fileIcon.getPath(), bitmap);                } catch (IOException e) {                    showToastBottom("图片压缩异常");                }            } else if (CODE_GALLERY_REQUEST == requestCode) {                if (hasSdcard()) {//                    cropImageUri = Uri.fromFile(fileCropUri);                    Uri newUri = Uri.parse(PhotoUtils.getPath(this, data.getData()));                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {                        newUri = FileProvider.getUriForFile(this, mContext.getPackageName() + ".fileprovider", new File(newUri.getPath()));                    }                    int bitmapDegree = getBitmapDegree(newUri.getPath());                    Bitmap bitmapFromUri = PhotoUtils.getBitmapFromUri(newUri, this);                    if (bitmapFromUri == null) {                        showToastBottom("对不起,图片不正确!");                        return;                    }                    Bitmap bitmap = rotateBitmapByDegree(bitmapFromUri, bitmapDegree);                    if (bitmap == null) {                        showToastBottom("对不起,图片不正确!");                        return;                    }                    try {                        File fileIcon = new File(Environment.getExternalStorageDirectory().getPath() + "/" + SystemClock.currentThreadTimeMillis() + "4.jpg");                        saveBitmapToUri(bitmap, fileIcon.getAbsolutePath());                        getbitmap(type, fileIcon.getPath(), bitmap);                    } catch (IOException e) {                        showToastBottom("图片压缩异常");                    }//                    PhotoUtils.cropImageUri(this, newUri, cropImageUri, 1, 1, output_X, output_Y, CODE_RESULT_REQUEST);                } else {                    ToastUtils.showToastCenter("设备没有SD卡!");                }//            } else if (CODE_RESULT_REQUEST == requestCode) {//                Bitmap bitmap = PhotoUtils.getBitmapFromUri(cropImageUri, this);//                if (bitmap != null && cropImageUri != null) {//////                    getbitmap(type, cropImageUri, bitmap);//                }            }        }    }
    /**     * 读取图片的旋转的角度     *     * @param path 图片绝对路径     * @return 图片的旋转角度     */    private int getBitmapDegree(String path) {        int degree = 0;        try {            // 从指定路径下读取图片,并获取其EXIF信息            ExifInterface exifInterface = new ExifInterface(path);            // 获取图片的旋转信息            int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,                    ExifInterface.ORIENTATION_NORMAL);            switch (orientation) {                case ExifInterface.ORIENTATION_ROTATE_90:                    degree = 90;                    break;                case ExifInterface.ORIENTATION_ROTATE_180:                    degree = 180;                    break;                case ExifInterface.ORIENTATION_ROTATE_270:                    degree = 270;                    break;            }        } catch (IOException e) {            e.printStackTrace();        }        return degree;    }    /**     * 将图片按照某个角度进行旋转     *     * @param bm     需要旋转的图片     * @param degree 旋转角度     * @return 旋转后的图片     */    public Bitmap rotateBitmapByDegree(Bitmap bm, int degree) {        Bitmap returnBm = null;        // 根据旋转角度,生成旋转矩阵        Matrix matrix = new Matrix();        matrix.postRotate(degree);        try {            // 将原始图片按照旋转矩阵进行旋转,并得到新的图片            returnBm = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);        } catch (OutOfMemoryError e) {        }        if (returnBm == null) {            returnBm = bm;        }        if (bm != returnBm) {            bm.recycle();        }        return returnBm;    }    /**     * 把压缩后的bitmap转化为file;     *     * @param path;压缩后的file路径     */    private boolean saveBitmapToUri(Bitmap bitmap, String path)            throws IOException {        File file = new File(path);        if (file.exists()) {            if (file.delete()) {                if (!file.createNewFile()) {                    return false;                }            }        }        BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(file));        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);//100为压缩的品质,100为100%        outStream.flush();        outStream.close();        return true;    }

回调webview

   @Override    protected void getbitmap(int type, String imagePath, Bitmap bitmap) {        Uri uri = Uri.fromFile(new File(imagePath));        if (Build.VERSION.SDK_INT > 18) {            mFilePathCallback.onReceiveValue(new Uri[]{uri});        } else {            mFilePathCallback.onReceiveValue(uri);        }    }

来看效果图

更多相关文章

  1. android让图片等比例缩放
  2. 设置activity背景图片
  3. Android(安卓)调用摄像头拍照 以及 从相册中选择照片
  4. Android中的图片查看器
  5. Android缩放图片文件引起的OOM异常
  6. Android绘制进阶之四:在位图上绘制文本并旋转
  7. linux开机logo 和 android开机logo 的修改
  8. Android(安卓)学习之《第一行代码》第二版 笔记(十九)从相册中选取
  9. android 指定组件的圆角图片处理

随机推荐

  1. android shape的使用
  2. Android使用SQlite数据库
  3. android 去掉ScrollVIew拉到尽头时再拉的
  4. Android(安卓)SDCard Filesystem
  5. Android的基础问题、面试题
  6. Android事件处理第一节(View对Touch事件的
  7. Android之Android(安卓)N 上的notificati
  8. GitHub 优秀的 Android(安卓)开源项目 淘
  9. Android开发之dagger.android--Activity
  10. 一些非常实用的 Android(安卓)开发资源