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);
}