3

これは、これまでに Android から直面した中で最も奇妙な動作です。

写真を撮ってからトリミングしたい。これは関連するコードです:

private void manageTakePhotoClicked() {
    outputFileUri = prepareNewFileUri();
    if(outputFileUri == null){
        Toast.makeText(ProfilePicture.this, "Unable to prepare directory", Toast.LENGTH_SHORT);
    }
    try {
        Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        i.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(i, RESULT_FROM_PHOTO_TAKEN);
    } catch (ActivityNotFoundException e) {
        Toast.makeText(ProfilePicture.this, "No camera found", Toast.LENGTH_SHORT);
    }
}

private Uri prepareNewFileUri(){
    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + FOLDER);
        if (directory.isDirectory() || directory.mkdirs()) {
            File file = new File(directory, "avatar.jpg");
            return Uri.fromFile(file);
        } else {
            Log.d("foo", "Couldn't create directions");
        }
    } else {
        Log.d("foo", "not mounted ");
    }
    return null;
}

OnActivityResult では、画像のトリミングをトリガーするだけです。

private void startCropActivity() {
    Intent intent = new Intent("com.android.camera.action.CROP");
    intent.setDataAndType(outputFileUri, "image/*");
    intent.putExtra("crop", "true");
    intent.putExtra("aspectX", THUMBNAIL_SIZE_WIDTH);
    intent.putExtra("aspectY", THUMBNAIL_SIZE_HEIGHT);
    intent.putExtra("outputX", THUMBNAIL_SIZE_WIDTH);
    intent.putExtra("outputY", THUMBNAIL_SIZE_HEIGHT);
    intent.putExtra("return-data", false);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
    startActivityForResult(intent, FROM_CROP);
}

これは初回のみ有効です。次に写真を撮ってトリミングしたいときは、最初の写真がトリミング用に撮影されます。ファイルマネージャーからこのフォルダーを見ると、最新の撮影写真から正しいサムネイルが表示されます。クリックすると、写真を開くのに約 5 ~ 8 秒かかります。最初に撮影した写真が表示され、ズームインまたはズームアウトすると、2 番目に撮影した写真に切り替わります (その場で)。要約: 5 枚の写真を撮り、トリミング プロセスをキャンセルすると、サムネイルに最新の写真が表示されます。デフォルトでは最初の写真が表示され、ピンチズームすると 2 番目の写真が表示されます。

もう1つ、フォルダー全体を削除しても同じ効果が得られます。

ところで:準備されたファイルに一意の名前を使用すると、すべて正常に機能します。しかし、それは私が望むものではありません。

4

1 に答える 1