区分来自IntentChooser的意图

时间:2013-05-27 07:06:27

标签: android android-intent

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

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

0 个答案:

没有答案