Android ios en la aplicación web solo llama al método de la cámara
Feliz trabajo, tantos problemas. (O (╥﹏╥) o) Un
nuevo problema en la aplicación web, para resolver un problema de que cuando haces clic en la imagen cargada, no puedes llamar al álbum cuando llamas directamente a la cámara. (Qué tipo de operación es esta, tonta)
Solo recuerdo que el atributo de captura puede llamar directamente a la cámara, video y otras funciones, pero se quita el atributo múltiple que se puede seleccionar. El primer intento ha fallado, pero este se puede usar en ios , entonces El problema a resolver es Android.
No sé qué hacer, pregúntale a Baidu Baba, el modo loco de Baidu ha comenzado, y todavía no hay solución, así que solo puedo deshacerme del jefe de Android y escribir un método. Jejeje, aquí
está tu ejemplo de código favorito
Método de llamada de front-end
Debido a que es posible admitir solo llamar a la cámara en ios, se acordó con Android cambiar el valor en aceptar para que la aplicación abra directamente la cámara
. 1. Antes de la modificación
<input type="file" capture="camera" ng-model="vm.avatarFile1" ngf-accept="'image/*'">
2. Después de la modificación
<input type="file" capture="camera" ng-model="vm.avatarFile1" ngf-accept="'bugdd/*'">
Código de shell de Android
El significado de este código es probablemente obtener el parámetro en Aceptar y determinar si contiene el parámetro que necesita. Si lo contiene, llame al método de cámara, si no, llame a los métodos de cámara y álbum.
@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);
}