无法从Android文档中获取相机代码

时间:2016-04-04 04:21:13

标签: android bitmap android-camera

我正在使用http://developer.android.com/training/camera/photobasics.html

中的代码

代码:

    private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
            File photoFile = null;
            try {
                photoFile = FileUtilities.createImageFile();
            } catch (IOException ex) {
                // Error occurred while creating the File
                Toast.makeText(getActivity(),"Error!",Toast.LENGTH_SHORT).show();
            }
            if (photoFile != null) {
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                        Uri.fromFile(photoFile));
                startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
            }
        }
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
            Bundle extras = data.getExtras(); //error
            //code after this doesn't get executed
        }
    }

我试图访问缩略图和存储在设备上的图片。但由于某种原因,当我尝试代码时,我在data.getExtras()上得到一个空指针异常;部分。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

这是臭名昭着的Android开发体验之一。

Android Intent不保证在data.getExtras()中提供捕获的图像,尤其是用户使用第三方相机/影像应用。您可以在here中找到许多试验和建议,并在任何地方使用“android camera intent null”进行Google搜索。

其中一些常见的如下。

  1. data.getExtras().get("data");
  2. data.getExtras()使用不同的密钥(即“照片”)
  3. data.getData()
  4. Uri.fromFile(f)用于EXTRA_OUTPUT预定义路径。
  5. Uri.fromFile(f)带有一些随机文件名(日期时间格式或IMG-xxx),不维护EXTRA_OUTPUT定义。
  6. 我建议你使用断点找到它的意图给出的变量路径。最好用if-else if-else方法检查所有这些方法。

    此外,在发布应用程序后,请仔细检查崩溃报告。您可能会从上述试验中得出错误。

答案 1 :(得分:0)

要获取ThumbNail,您无需创建文件等,请尝试以下代码。

   Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            // Ensure that there's a camera activity to handle the intent
            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                    startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
                }

并获得结果。

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

            if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
                Bundle extras = data.getExtras();
                Bitmap imageBitmap = (Bitmap) extras.get("data");
                imgView.setImageBitmap(imageBitmap);
            }

    }

imgView是您要将ThumbNail设置为的ImageView。

如果你想创建一个文件,然后尝试这个,[缩略图不需要],你可能想尝试在尝试读取和写入存储时添加以下权限。< / p>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

一切顺利。