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

时间:2014-04-04 10:34:28

标签: android android-camera

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

启动相机:

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

1 个答案:

答案 0 :(得分:0)

  

这几乎适用于所有设备

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

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

您的选择要么与现有行为一起生活,建议用户在需要时按BACK返回您的应用,或者跳过MediaStore.ACTION_IMAGE_CAPTURE并实施您自己的逻辑以使用相机拍照。