ACTION_IMAGE_CAPTURE不适用于Android 4.2.2

时间:2015-03-01 12:53:56

标签: android android-intent android-camera

我正在开发一款需要拍照并保存的应用,并在应用中显示。它适用于Android 4.0,但不适用于Android 4.2.2(我猜想以后版本也没有。)

以下是代码:

Button photoBtn = (Button) inflated.findViewById(R.id.btn_photo);
photoBtn.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {

         String fileStorageFolder = Environment.getExternalStorageDirectory() + File.separator + "MobiAgenda";
         File file = new File(fileStorageFolder + File.separator + "Contact" + id + ".jpg");
         Uri imgUri = Uri.fromFile(file);
         imgPath = file.getAbsolutePath();

         Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
         cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
         startActivityForResult(cameraIntent, CAMERA_REQUEST); 
    }
});

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {             

        float scale = getApplicationContext().getResources().getDisplayMetrics().density;
        Bitmap thumb = getThumbnailBitmap(imgPath, Math.round(100*scale));

        try
        {
            FileOutputStream out = new FileOutputStream(imgPath);
            thumb.compress(Bitmap.CompressFormat.JPEG, 100, out);
            out.flush();
            out.close();
        }
        catch (Exception e)
        {
            System.err.println(e.toString());
        }

        takenPhoto.setImageBitmap(thumb);
        takenPhoto.setVisibility(View.VISIBLE);
    }  
}

好吧,正如我之前所说的,这段代码正在我的HTC Desire C上运行。但是我已经在运行Android 4.2.2的两款不同手机中尝试过这些,这些是我得到的行为:

-Droxio B51:意图打开相机。按取消按钮,将回调onActivityResult,result_code = 0(应用程序不执行任何操作 - >确定)。但是当按下相机界面中的接受按钮时,照片会保存在手机中(与通过EXTRA_OUTPUT给出的路径不同),但它不会回拨onActivityResult。

-Sony Xperia L:意图打开相机。拍照后,没有选择取消或接受(所以我猜是接受它),但它调用onActivityResult并且result_code = 0,所以应用程序什么都不做。在这种情况下,图片不会保存在手机的任何路径中(或者至少我找不到它)。

为什么我有这两种不同的行为?最重要的是,我该如何解决它们?

感谢。

1 个答案:

答案 0 :(得分:1)

  

为什么我有这两种不同的行为?

ACTION_IMAGE_CAPTURE正在调用第三方应用程序来拍照。有数以千计的相机应用程序,包括预先安装的应用程序和用户从Play商店等地方安装的应用程序。没有必要支持ACTION_IMAGE_CAPTURE,而那些可能会遇到错误,正如您所遇到的那样。

  

我该如何解决?

停止使用ACTION_IMAGE_CAPTURE,并在自己的应用中自己拍照。您无法强迫开发人员编写正确处理ACTION_IMAGE_CAPTURE的相机应用程序,并且您无法强迫用户使用正确处理ACTION_IMAGE_CAPTURE的相机应用程序。