webapp中安卓 ios 只调用拍照方法

webapp中安卓 ios 只调用拍照方法

工作开心,问题多多啊。(o(╥﹏╥)o)
webapp新问题,解决一个在上传图片中点击时直接调用相机不能调用相册。(这啥操作,懵逼ing)
我只记得capture这个属性可以直接调用 相机,录像等功能 但是要去掉multiple这个可以多选的属性,第一次尝试已失败告终,不过这个在ios可以使用,那么要解决的就是安卓的问题了。
不会怎么办,问百度巴巴,疯狂百度模式开始,依旧没有找到解决办法,那就只能摆脱安卓大佬写个方法了。嘿嘿嘿
下面是你们喜爱的代码示例

前端调用方法

因为在ios中这样可以支持只调用相机,所以跟安卓约定改变accept中的值来使app直接打开相机
1.修改前

 <input type="file" capture="camera" ng-model="vm.avatarFile1" ngf-accept="'image/*'">

2.修改后

 <input type="file" capture="camera" ng-model="vm.avatarFile1" ngf-accept="'bugdd/*'">

安卓壳代码

这段代码的意思大概是 获取到accept中 的参数,判断是否含有他需要的那个参数。如果含有就调用相机方法,如果没有就调用相机和相册的方法。

@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
    String[] acceptTypes = fileChooserParams.getAcceptTypes();
    mOpenFileChooserCallBack.showFileChooserCallBack(filePathCallback, acceptTypes);
    return true;
}

public interface OpenFileChooserCallBack {
    void openFileChooserCallBack(ValueCallback<Uri> uploadMsg, String acceptType);
    void showFileChooserCallBack(ValueCallback<Uri[]> filePathCallback, String[] acceptTypes);
}


@Override
public void showFileChooserCallBack(ValueCallback<Uri[]> filePathCallback, String[] acceptType) {
    mUploadMsg5Plus = filePathCallback;
    showOptions(acceptType[0]);
}

public void showOptions(String acceptType) {
    if (acceptType.indexOf("bugdd")) {//判断accept中是否有这个参数
        startCamera();
    } else {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.setOnCancelListener(new ReOnCancelListener());
        alertDialog.setItems(array.options, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                /**
                 * 相册
                 */
                if (which == 0) {

                    startPicture();
                }
                /**
                 * 拍照
                 */
                if (which == 1) {

                    //启动相机
                    startCamera();
                }
            }
        });
        alertDialog.show();
    }
}


/**
 * 启动选择照片
 */
private void startPicture() {

    if (!checkPermission(MyConstant.img_permissions, REQUEST_CODE_PICK_IMAGE_PER)) {
        return;
    }

    pick_imageIntent = ImageUtil.choosePicture();
    startActivityForResult(pick_imageIntent, REQUEST_CODE_PICK_IMAGE);
}


/**
 * 打开相机获取图片
 */
private void startCamera() {

    if (!this.checkPermission(MyConstant.photo_permissions, REQUEST_CODE_IMAGE_CAPTURE_PER)) {
        return;
    }

    image_captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    //判断是否有相机应用
    if (image_captureIntent.resolveActivity(getPackageManager()) == null) {
        //无相机
        Toast.makeText(this, "无法打开相机", Toast.LENGTH_SHORT).show();
        return;
    }
    //设置兼容配置 主要考虑 Android N
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {

        //申请权限
        image_captureIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        image_captureIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        //
    }

    try {

        photoFile = createImageFile();
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    if (photoFile != null) {
        contentUri = FileProvider.getUriForFile(this,
                "com.zrbx.yzs.fileProvider",
                photoFile);

    }

    image_captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, contentUri);
    startActivityForResult(image_captureIntent, REQUEST_CODE_IMAGE_CAPTURE);
}
上一篇:docker 实践五:端口映射和容器互联


下一篇:Docker 容器连接