2

私がフォローしたandroid(http://developer.android.com/guide/topics/media/camera.html)で写真を撮る簡単なチュートリアルがあります。

private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
protected void onTakePicture()
{
    // create Intent to take a picture and return control to the calling application    
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);    
    // create a file to save the image    
    File file = Environment.getExternalStorageDirectory();
    String path = file.getAbsolutePath() + "/Android/data/com.myapplication/files";
    File dir = new File(path);
    if (!dir.isDirectory())
        dir.mkdirs();
    File outFile = new File(path + File.separator + "img.jpg");
    Uri fileUri = Uri.fromFile(outFile);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
    // set the image file name    
    // start the image capture Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);        
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode==CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE)
    {
         // Image captured and saved to fileUri specified in the Intent
        Uri fn = data.getData();
        Toast.makeText(this, "Image saved to:\n" + fn.toString(), Toast.LENGTH_LONG).show();
    }
}

私はこれを活動の中から呼んでいます。問題は、カメラアクティビティが表示されたときに複数の写真を撮ることができるのに、1枚の写真を撮ってから呼び出し元のアクティビティに戻りたいということです。onActivityResultは、(「戻る」ボタンを押して)カメラアクティビティを終了するまで呼び出されません。次に、data.getData()がクラッシュします。

何か案は?

ありがとうGerhard

4

2 に答える 2

1

うーん...これは私が画像をキャプチャするために機能します:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
activity.startActivityForResult(intent, AbstractActivity.CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

ユーザーが写真を撮ると、ユーザーがこの画像を受け入れるかどうかを尋ねられ、その後、私のアクティビティに戻ります...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            handleAvatarUpload(data); // which uses Uri selectedImage = data.getData();
        } 
    }
}

このコードでクラッシュレポートを受け取ったことがなく、数か月間公開されていません。私たちのユーザーベースは、Android 2.3.3がユーザーの約71%、2.2が16.35%、2.1が5.7%で、このカテゴリの他のアプリと一致しています。

于 2012-05-16T13:53:15.350 に答える
0

これは古い質問ですが、同じ問題が発生しました。

私にとっては、URIではなくURIパスを提供することで修正されましたmyUri.getPath()

以下はあなたが望むことをするはずです:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri.getPath());
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
于 2018-05-25T12:00:21.807 に答える