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);

システムで待機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)または別のアクションを確認する方法があるかどうかを考えていました。前もって感謝します。

小さな編集:私の場合、どこからでも画像を取得するか、最初から作成することで構成されていますが、この例は機能しますが、コードを改善する(そしてより一般的な答えを見つける)ために、提案を受け付けたままにします.

4

0 に答える 0