0

私は、ユーザーがカメラを使用して写真を撮れるようにする Android プロジェクトに取り組んでいます。

私の方法は次のようになります:

private void takePicture(){
        Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(camera, 1337);
    }

onActivityResult で写真を撮り、SdCard に保存します。写真のパスを返すように takePicture() 関数を変更しようとしています (void ではなく文字列)。

java.io.File の getPath() でそれができることはすでに知っています。

私の質問は次のとおりです。画像のパスを返すように関数を変更するにはどうすればよいですか?

4

2 に答える 2

1

takePictureインテントが完了する前にパスが返されるため、パスを返すことはできません。内部のパスで何かをする必要がありますonActivityResult

于 2013-03-21T14:33:39.603 に答える
1

これは、pictureCallback でキャプチャおよび保存された画像のパスを取得するコードです。

このコードmFilePathでは、画像のパスを保持している文字列です...

PictureCallback mPicture = new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            File pictureFile = getOutputMediaFile();
            if (pictureFile == null) {
                return;
            }
            try {
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(data);
                fos.close();

                String mFilePath = pictureFile.getAbsolutePath(); 
            } catch (FileNotFoundException e) {

            } catch (IOException e) {
            }
        }
    };

    private static File getOutputMediaFile() {
        File mediaStorageDir = new File(
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyCameraApp");
        if (!mediaStorageDir.exists()) {
            if (!mediaStorageDir.mkdirs()) {
                Log.d("MyCameraApp", "failed to create directory");
                return null;
            }
        }
        // Create a media file name
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File mediaFile;
        mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");

        return mediaFile;
    }
}
于 2013-03-21T14:35:46.263 に答える