@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
filePath = getOutputMediaFile(FileColumns.MEDIA_TYPE_IMAGE);
File file = new File(filePath);
Uri output = Uri.fromFile(file);
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, output);
startActivityForResult(i, RETURN_FILE_PATH);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//data is always null here.
//requestCode = RETURN_FILE_PATH;
//resultCode = Activity.RESULT_OK;
}
我检查了文件和输出Uri 的值,两者都很好,捕获的图像实际存在于该位置。
但即使在捕获图像后,onActivityResult
中返回的数据始终为null
。
修改
我查了这个问题:
onActivityResult returns with data = null
说:
通过传递具有相机意图的EXTRAOUTPUT来保存图像 onActivityResult中的data参数始终返回null。所以, 而不是使用数据来检索图像,使用文件路径 检索位图。
也许这个解决方案对我有用。但是我的上述代码直到现在都是一个有效的代码。
答案 0 :(得分:19)
根据此post,当您预先插入uri时,数据为空。这意味着您已经在此处定义了输出uri:
i.putExtra(MediaStore.EXTRA_OUTPUT, output);
所以当你得到一个Activity.RESULT_OK;只需按已知网址加载拍摄的照片。
答案 1 :(得分:1)
试试这段代码,这对我有用。
else if(requestCode == Constant.PICK_FROM_CAMERA)
{
if (resultCode == Activity.RESULT_OK)
{
if(data!=null)
{
mImageCaptureUri = data.getData();
//path= mImageCaptureUri.getPath();
try
{
path = getPath(mImageCaptureUri,Wonderlistpage.this); //from Gallery
}
catch(Exception e)
{
path = mImageCaptureUri.getPath();
Log.i("check image attach or not", e.toString());
}
String arr[] = path.split("/");
int i;
String k = null;
for(i=0;i<arr.length;i++)
{
k=arr[i];
}
photoname="_"+String.valueOf(System.currentTimeMillis()) +k;
if(setprofileimage_sendimagewithmessage==1)
{
performCrop(mImageCaptureUri);
}
else
{
loading_details="CAMERA";
new performBackgroundTask33().execute();
}
}
else
{
file1 = new File(Environment.getExternalStorageDirectory(),
String.valueOf(System.currentTimeMillis()) + "_FromCamera.jpg");
Uri mImageCaptureUri = Uri.fromFile(file1);
try
{
path = getPath(mImageCaptureUri,Wonderlistpage.this); //from Gallery
}
catch(Exception e)
{
path = mImageCaptureUri.getPath();
Log.i("check image attach or not", e.toString());
}
String arr[] = path.split("/");
int i;
String k = null;
for(i=0;i<arr.length;i++)
{
k=arr[i];
}
photoname="_"+String.valueOf(System.currentTimeMillis()) +k;
if(setprofileimage_sendimagewithmessage==1)
{
performCrop(mImageCaptureUri);
}
else
{
loading_details="CAMERA";
new performBackgroundTask33().execute();
}
}
//new UploadTask().execute();
}
}
答案 2 :(得分:1)
请尝试以下代码
{
final String[] imageColumns = { MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA };
final String imageOrderBy = MediaStore.Images.Media._ID + " DESC";
Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
imageCursor.moveToFirst();
do {
String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
if (fullPath.contains("DCIM")) {
//get bitmap from fullpath here.
return;
}
}
while (imageCursor.moveToNext());
答案 3 :(得分:0)
将此代码放入onActivityResult。我在某些设备上面临同样的问题,这解决了我的问题。希望这也会对你有所帮助。
try {
Uri selectedImage = output;
if (selectedImage == null)
return;
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
} catch (Exception e) {
return;
}
您将在 picturePath 变量中获取图片路径,在 selectedImage 变量中获取Uri。
答案 4 :(得分:0)
如果您的活动在清单中将launchmode作为singleInstance,那么您将面临此问题。尝试更改它。因为它每次取消结果。