我在从 IntentChooser 获取图片时遇到严重问题。它使您可以选择从相机或驱动器获取图片:
Intent pickIntent = new Intent();
pickIntent.setType("image/*");
pickIntent.setAction(Intent.ACTION_GET_CONTENT);
boolean cameraAvailable = isCameraAvailable(this);
String pickTitle = cameraAvailable? "Select or take a new Picture" : "Select a Picture";
Intent chooserIntent = Intent.createChooser(pickIntent, pickTitle);
if(cameraAvailable)
{
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
chooserIntent.putExtra
(
Intent.EXTRA_INITIAL_INTENTS,
new Intent[] { takePhotoIntent }
);
}
startActivityForResult(chooserIntent, GET_PICTURE);
WhereisCameraAvailable(Context context)
检查系统中是否有摄像头在等待。
问题是,当在 中时onActivityResult
,两个意图(拍照或从图库中获取图片)当然是相同的requestCode
,所以我必须以另一种方式有所作为。我发现来自相机的意图有一个动作inline-data
,而另一个根本没有动作:
if(intent.getAction() == "inline-data")
{
bitmap = (Bitmap) intent.getExtras().get("data");
}
else
{
InputStream stream = getContentResolver().openInputStream(
intent.getData());
bitmap = BitmapFactory.decodeStream(stream);
stream.close();
}
现在,问题来了,我不太确定这是区分的最佳解决方案,我在想是否有办法检查完整的动作(MediaStore.ACTION_IMAGE_CAPTURE
或Intent.ACTION_GET_CONTENT
)或另一个。提前致谢。
微小的编辑:在我的情况下,包括从任何地方抓取图片或从头开始创建它,该示例可以正常工作,但是为了改进我的代码(并找到更通用的答案),我将把它留给建议.