마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

카메라 이어서 질문합니다

0 추천
private static final int REQUEST_CODE_CAMERA = 0;
private Uri photoUri;

@SuppressLint("WrongThread")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);

    Button Button = (Button) findViewById(R.id.button);
    Button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            requestPermissionOrTakePhoto();
        }
    });
}

private final ActivityResultLauncher<String> permissionResult = registerForActivityResult(
        new ActivityResultContracts.RequestPermission(), new ActivityResultCallback<Boolean>() {
            @Override
            public void onActivityResult(Boolean isGranted) {
                photoUri = takePhoto();
            }
        }
);

private final ActivityResultLauncher<Uri> takeImageResult = registerForActivityResult(
        new ActivityResultContracts.TakePicture(), new ActivityResultCallback<Boolean>() {
            @Override
            public void onActivityResult(Boolean isSuccess) {
                if (!isSuccess) return;

                loadImage(photoUri);
            }
        }
);

private Uri createPhotoUri() throws IOException {
    return FileProvider.getUriForFile(this,
            "com.myproject.fileprovider",
            createImageFile()
    );
}

private File createImageFile() throws IOException {
    // Create an image file name
    @SuppressLint("SimpleDateFormat") String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = "JPEG_" + timeStamp + "_";
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
    return File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );
}

private boolean cameraPermissionGranted() {
    return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
            == PackageManager.PERMISSION_GRANTED;
}

private void requestCameraPermission() {
    permissionResult.launch(Manifest.permission.CAMERA);
}

private void requestPermissionOrTakePhoto() {
    if (!cameraPermissionGranted()) {
        requestCameraPermission();
        return;
    }

    photoUri = takePhoto();
}

private Uri takePhoto() {
    try {
        Uri photoUri = createPhotoUri();
        takeImageResult.launch(photoUri);
        return photoUri;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

private void loadImage(Uri uri) {
    ImageView imageView = findViewById(R.id.imageView);
    Glide.with(this)
            .load(uri)
            .into(imageView);
}

 

답변주신건 프레그먼트여서 액티비티로 옮겨서 작업했습니다.

enerigpy (2,110 포인트) 님이 2023년 6월 1일 질문

1개의 답변

+1 추천
 
채택된 답변
코드만 있고 질문은 없네요.
Button Button은 클래스명을 변수명으로 사용하기 때문에 이상해요. Button button이나 Buttom takePhotoButton과 같이 선언하세요
spark (227,510 포인트) 님이 2023년 6월 2일 답변
enerigpy님이 2023년 6월 2일 채택됨
activity로 했을 때 저기서 버튼 누르면 튕기고 있어서
java.lang.ClassNotFoundException: Didn't find class "com..whateverString" on path: DexPathList
invalid cache도 해봤습니다
에러메세지에 나오는 클래스를 한번 체크해 보세요. 해당 클래스와 관련해서 힌트가 있을 겁니다.
역시 디버깅이 답이네요!
...