webappのAndroidiosは、カメラメソッドのみを呼び出します

webappのAndroidiosは、カメラメソッドのみを呼び出します

幸せな仕事、とても多くの問題。(O(╥﹏╥)o)
アップロードされた画像をクリックしたときにカメラを直接呼び出すとアルバムを呼び出せないという問題を解決するためのwebappの新しい問題。(これはどのような操作ですか、ばかげています)キャプチャ属性はカメラ、ビデオ、その他の機能を直接呼び出すことができることを
覚えていますが、選択できる複数の属性は削除されています。最初の試行は失敗しましたが、これは使用できます、IOS、Androidの後、問題が解決すべきです。どうすればよいかわからないので、Baidu Babaに聞いてください。クレイジーなBaiduモードが開始されましたが、まだ解決策がないため、Androidのボスを排除してメソッドを作成するしかありません。Hehehe、これがあなたのお気に入りのコード例です

フロントエンド呼び出しメソッド

iOSでのカメラの呼び出しのみをサポートできるため、アプリがカメラを直接開くように、acceptの値を変更することはAndroidと合意してい
ます。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/*'">

Androidシェルコード

このコードの意味は、おそらくパラメータを受け入れて、必要なパラメータが含まれているかどうかを判断することです。含まれている場合はcameraメソッドを呼び出し、含まれていない場合はcameraメソッドとalbumメソッドを呼び出します。

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

おすすめ

転載: blog.csdn.net/lbchenxy/article/details/98481699
おすすめ