프로젝트에서 애플리케이션에서 사진을 찍어 해당 사진을 서버로 보내는 기능을 넣기로 했다.
코틀린을 처음 사용해서 제대로 못쓰는거 같다.
안드로이드에서 카메라를 사용하는 방법은 2가지가 있다고 하는데
Surfaceview로 커스텀해서 카메라 프리뷰를 만드는 방법은 좀 어렵다고 하니
구현하기 쉬운 Intent로 구현한다.
AndroidManifest.xml
1
2
3
4
5
6
7
8
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />
|
cs |
저장소 관련 권한과, 카메라 권한을 준다.
MainActivity.kt
1
2
3
4
5
6
7
8
9
10
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// 카메라 실행 부분
if (checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, 1)
} else {
Log.d("test", "권한 설정 요청")
ActivityCompat.requestPermissions(this@MainActivity, arrayOf<String?>(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE), 1)
}
}
|
cs |
카메라 및 저장소 접근 권한을 확인하고,
카메라 인텐트를 만들어 시작하면 끝.
MainActivity.kt - onActivityResult
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
//findViewById(R.id.result_image).setImageURI(photoUri);
try {
when (requestCode) {
REQUEST_TAKE_PHOTO -> {
if (resultCode === Activity.RESULT_OK) {
val file = File(mCurrentPhotoPath)
myBitmap = MediaStore.Images.Media
.getBitmap(contentResolver, Uri.fromFile(file))
}
}
}
} catch (error: Exception) {
error.printStackTrace()
}
|
cs |
onActivityResult에서 카메라 intent의 결과를 받아와서, Bitmap으로 불러온다.
이후 imageView에 넣어도 되고.. 자유롭게 사용하면 된다.
결과
카메라 intent를 사용하는 경우, 결과 사진이 회전되고 화질이 낮아서
해결하는 방법은 다음 게시글에 작성할 예정
'개발 > 안드로이드' 카테고리의 다른 글
[Kotlin] 안드로이드 RecyclerView 누른 item만 색깔 바뀌게 하기 (0) | 2020.10.22 |
---|---|
[Kotlin] 안드로이드 다른 class에서 UI 그리기 (0) | 2020.10.16 |
[Kotlin] 안드로이드 bitmap으로부터 uri가져온 뒤, filepath 찾기 (3) | 2020.10.14 |
[Kotlin] 안드로이드 스튜디오 카메라 회전 및 화질 향상 (0) | 2020.10.14 |
[Java] 안드로이드 OkHttp3를 사용한 서버로 파일 업로드하기 (4) | 2020.09.07 |