0

在我的应用程序中,我使用以下代码访问相机:

camIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(camIntent, 0);

在我的 onActivityForResult 中:

AQuery aq = new AQuery(this);
Uri selectedImage = data.getData();
ivSecondPic.setVisibility(View.VISIBLE);
strMainPic = getRealPathFromURI(selectedImage);
File f = new File(strMainPic);

这是我得到错误的地方:

public String getRealPathFromURI(Uri contentUri) {
        String res = null;
        String[] proj = { MediaStore.Images.Media.DATA };
        //This line (cursor)
        Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
        if(cursor.moveToFirst()){;
           int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
           res = cursor.getString(column_index);
        }
        cursor.close();
        return res;
    }

无论如何,这适用于官方软件。问题是当我尝试在安装了 stock rom 的设备上使用相机时,我得到一个NullPointerException. 有谁知道如何解决这个问题?先感谢您。

编辑我发现selectedImagenull. 我如何让它拥有图像uri?我有什么明显的遗漏吗?显然data.getData()是什么都不返回。那么我该如何获得Uri呢?

4

1 回答 1

0

是的,这实际上是一个问题。您可以尝试创建一个文件,在使用相机实际拍摄之前,您将在其中放置图像。就像是:

                filename = System.currentTimeMillis()  + ".jpg";
                filepath = Environment.getExternalStorageDirectory() + "/DIR/";
                photoFile = new File(filepath+filename);
                photoUri = Uri.fromFile(photoFile);

                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE );
                intent.putExtra( MediaStore.EXTRA_OUTPUT, photoUri);
                startActivityForResult(intent, R.id.take_photo);

然后在 onActivityResult 中:

            Uri selectedImageUri = null;
            String uriString = null;
            try{
                selectedImageUri = data.getData();
            }catch(Exception e){ }

            if(selectedImageUri == null){
                selectedImageUri = takePhotoUri;
                // if nothing came back insert image manually
                uriString = Media.insertImage(getContentResolver(), filepath+filename, filename, null);
            }
于 2013-09-20T09:13:15.800 回答