3

我在从 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_CAPTUREIntent.ACTION_GET_CONTENT)或另一个。提前致谢。

微小的编辑:在我的情况下,包括从任何地方抓取图片或从头开始创建它,该示例可以正常工作,但是为了改进我的代码(并找到更通用的答案),我将把它留给建议.

4

0 回答 0