我在从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);
isCameraAvailable(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
)或另一个。提前谢谢。
微小的编辑:在我的情况下,其中包括从任何地方抓取图片或从头开始创建图片,这个例子正常工作,但为了改进我的代码(并找到更通用的回答)我会接受建议。