Android捕获图像相机后在LG手机中重新打开,在其他设备上工作正常



这几乎可以在所有设备上正常工作,但是一旦捕获图像并且用户按保存,就会重新打开相机。

启动相机:

private void launchCamera() {
    try
    {   
        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File file = getFilePath(2);
        imageUri = Uri.fromFile(file);
        cameraIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,imageUri);
        startActivityForResult(cameraIntent, 1);
    }catch(Exception e){
        Log.v("Exception ", e.toString());
    }
}

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    try {
        if (resultCode == RESULT_OK){
            switch (requestCode) {
            case 1:
                try{
                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
                    imgView.setImageBitmap(bitmap);
                    break;
                }catch (Exception e) {
                    Log.v("Exception ", e.toString());
                }
            default:
                break;
            }
        }
    }
    catch(Exception e){
        Log.v("Exception ", e.toString());
    }
}

创建临时文件路径:

private File getFilePath(int type) {
    File mediaFile = null;
    try{
        File mediaStorageDir = null;
        Boolean isSDPresent = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
        if(isSDPresent) {
            String path = Environment.getExternalStorageDirectory()+"/MyFolder";
            mediaStorageDir = new File(path);
            if (! mediaStorageDir.exists()){
                if (! mediaStorageDir.mkdirs()){
                    Log.v("Exception ", "failed to create directory");
                    return mediaFile;
                }
            }
        } else {
            mediaStorageDir = appContext.getDir("MyFolder", Context.MODE_PRIVATE);
        }
        if (type == 2){
            mediaFile = new File(mediaStorageDir.getPath() + File.separator + "MyFolder_IMG_"+ String.valueOf(UUID.randomUUID()) + ".png");
        } 
    } catch(Exception e){
        Log.v("Exception ", e.toString());
    } 
    return mediaFile;
}

这几乎可以在所有设备上正常工作

充其量,它对于您尝试过的设备以及您在这些设备上尝试过的相机应用程序"工作正常"。有超过10,000种Android设备型号,Play商店中有数百个相机应用程序。这导致了数百万种组合。

理想情况下MediaStore.ACTION_IMAGE_CAPTURE启动的活动将在用户拍照后通过setResult()finish()将控制权返回给你的应用。但是,没有任何要求(通过任何类型的审批流程验证)强制相机应用的开发人员在用户拍照后将控制权归还给你。

你的选择是接受目前的行为,建议用户在需要时按 BACK 返回你的应用,或者跳过MediaStore.ACTION_IMAGE_CAPTURE并实现你自己的逻辑来使用相机拍照。

最新更新