无法从相机意图选择器4.2.2 AVD得到的图像 [英] Can't get image from camera with intent chooser on 4.2.2 AVD

查看:144
本文介绍了无法从相机意图选择器4.2.2 AVD得到的图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的工作我的应用程序的一部分,允许用户无论是从相机或从图库中选择图像,使用意向选择器。

I'm working on a part of my application that allows a user to select an image either from camera or from gallery, using an Intent chooser.

这是我的2.2.1的Andr​​oid手机上工作正常,但是当我编译它在4.2.2 AVD它时,我用相机将返回一个空指针错误,

It's working fine on my 2.2.1 android phone, but when i compile it on a 4.2.2 AVD it returns a null pointer error when i use the camera,

 public void onClick(View View) 
{
    Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT,null);
    galleryIntent.setType("image/*");
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT);
    galleryIntent.addCategory(Intent.CATEGORY_OPENABLE);


    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

    Intent chooser = new Intent(Intent.ACTION_CHOOSER);
    chooser.putExtra(Intent.EXTRA_INTENT, galleryIntent);      
    chooser.putExtra(Intent.EXTRA_TITLE, "Chooser");

    Intent[] intentArray =  {cameraIntent}; 
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
    startActivityForResult(chooser,REQUEST_CODE);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
    {
    try 
            {
            if (bitmap != null) 
                {
                    bitmap.recycle();
                }

            InputStream stream = getContentResolver().openInputStream(data.getData());
            bitmap = BitmapFactory.decodeStream(stream);
            stream.close();
            imageView.setImageBitmap(bitmap);
            }

        catch (FileNotFoundException e) 
            {
                e.printStackTrace();
            }

        catch (IOException e) 
            {
                e.printStackTrace();
            }
    super.onActivityResult(requestCode, resultCode, data);
    }
}

这是我得到的错误:结果
5月5日至五日:03:31.730:E / AndroidRuntime(820):产生的原因:显示java.lang.NullPointerException

this is the error i get:
05-05 05:03:31.730: E/AndroidRuntime(820): Caused by: java.lang.NullPointerException

和它说,这个问题是在这一行:

And it said that the problem is in this line :

InputStream stream = getContentResolver().openInputStream(data.getData());

我究竟做错了什么?

What am i doing wrong?

更新:

现在它的工作,这里是解决方案:

Now it's working and here is the solution:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
    {
        if(data.getData()!=null)
        {
            try 
            {
            if (bitmap != null) 
                {
                    bitmap.recycle();
                }

            InputStream stream = getContentResolver().openInputStream(data.getData());
            bitmap = BitmapFactory.decodeStream(stream);
            stream.close();
            imageView.setImageBitmap(bitmap);
            }

        catch (FileNotFoundException e) 
            {
                e.printStackTrace();
            }

        catch (IOException e) 
            {
                e.printStackTrace();
            }
        } 

        else 
        {
            bitmap=(Bitmap) data.getExtras().get("data"); 
            imageView.setImageBitmap(bitmap);
        }

        super.onActivityResult(requestCode, resultCode, data);
    }
}

谢谢您的帮助!

推荐答案

喜有这个code一试。

Hi have a try with this code.

以下code是相机按钮单击作品:

following code is for camera button click works :

imgviewCamera.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                 //define the file-name to save photo taken by Camera activity
                String fileName = "new-photo-name.jpg";
                //create parameters for Intent with filename
                ContentValues values = new ContentValues();
                values.put(MediaStore.Images.Media.TITLE, fileName);
                values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");
                //imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState)
                imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                //create new Intent
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                startActivityForResult(intent, PICK_Camera_IMAGE);
            }
        });


OnActivityresult code will be like below 



protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Uri selectedImageUri = null;
        String filePath = null;
        switch (requestCode) {               
                case PICK_Camera_IMAGE:
                     if (resultCode == RESULT_OK) {
                        //use imageUri here to access the image
                        selectedImageUri = imageUri;

                    } else if (resultCode == RESULT_CANCELED) {
                        Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(this, "Picture was not taken", Toast.LENGTH_SHORT).show();
                    }
                     break;
            }

            if(selectedImageUri != null){
                    try {
                        // OI FILE Manager
                        String filemanagerstring = selectedImageUri.getPath();

                        // MEDIA GALLERY
                        String selectedImagePath = getPath(selectedImageUri);

                        if (selectedImagePath != null) {
                            filePath = selectedImagePath;
                        } else if (filemanagerstring != null) {
                            filePath = filemanagerstring;
                        } else {
                            Toast.makeText(getApplicationContext(), "Unknown path",
                                    Toast.LENGTH_LONG).show();
                            Log.e("Bitmap", "Unknown path");
                        }

                        if (filePath != null) {

                            Toast.makeText(getApplicationContext(), " path" + filePath,
                                    Toast.LENGTH_LONG).show();

                        Intent i = new Intent(getApplicationContext(), EditorActivity.class);
                            // passing array index
                            i.putExtra("id", filePath);
                            startActivity(i);

                        } 
                    } catch (Exception e) {
                        Toast.makeText(getApplicationContext(), "Internal error",
                                Toast.LENGTH_LONG).show();
                        Log.e(e.getClass().getName(), e.getMessage(), e);
                    }
            }



    }

     public String getPath(Uri uri) {
            String[] projection = { MediaStore.Images.Media.DATA };
            Cursor cursor = managedQuery(uri, projection, null, null, null);
            if (cursor != null) {
                // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL
                // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA
                int column_index = cursor
                        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                return cursor.getString(column_index);
            } else
                return null;
        }

不要忘了添加摄像头权限清单文件。结果
希望这会帮助你。

dont forget to add camera permission in manifest file.
hope this will help you.

这篇关于无法从相机意图选择器4.2.2 AVD得到的图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆