在我的应用程序中,我使用以下代码访问摄像头:
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;
}
无论如何,这适用于官方软件。问题是当我尝试在安装了库存rom的设备上使用相机时,我得到NullPointerException
。有谁知道如何解决这个问题?提前谢谢。
编辑我发现selectedImage
是null
。如何获得图像uri?有什么明显的东西让我失踪吗?显然data.getData()
没有返回任何内容。那么如何获得Uri
?
答案 0 :(得分: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);
}