Android 카메라 사용 방법 2탄 갤러리 추가
1탄 아래 보고오쟈!
Android 카메라 사용 방법
Android 카메라 사용 방법 우선 아래와 같이 화면을 꾸며준다. 이미지와 버튼을 올려놓고 적당한 id명과 text를 설정해준다 그리고 다음과 같이 코딩을 해주고 숙지한다. package com.monosoft.androidcamer
monoworld-1.tistory.com
***************************추가 소스코드
1. 상수
//갤러리 열기 함수
val FLAG_REQ_GALLERY = 102
2.리스터 추가
buttonGallery.setOnClickListener {
//카메라 권한 체크
Log.d("갤러리","ㅁ")
if(isPermitted(STORAGE_PERMISSION)) {
//갤러리 오픈
Log.d("갤러리","openGallery")
openGallery()
} else {
//권한요청
Log.d("갤러리","ActivityCompat")
ActivityCompat.requestPermissions(this,STORAGE_PERMISSION,FLAG_PERM_STORAGE)
}
}
//갤러리 열기 함수
fun openGallery() {
//갤러리도 이미 생성되어있어 상수 호출하면 됨
val intent = Intent(Intent.ACTION_PICK) //파일을 선택할수있는 창을 열어줌
//타입을 설정해준다.
intent.type = MediaStore.Images.Media.CONTENT_TYPE
//타입을 설정해주면 이미지들만 목록에 보여준다.
startActivityForResult(intent,FLAG_REQ_GALLERY)
//이후 onActivityResult 호출됨
}
//사진파일을 저장하는 함수 (파일명, 파일확장자, 비트맵)
fun saveImageFile(filename : String, mimeType:String, bitmap : Bitmap) : Uri? {
//MediaStore 에 있는 상수로 된 이름,확장자를 가져옴
var values = ContentValues()
values.put(MediaStore.Images.Media.DISPLAY_NAME,filename)
values.put(MediaStore.Images.Media.MIME_TYPE,mimeType)
//중복 사용을 막기 위함
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
values.put(MediaStore.Images.Media.IS_PENDING,1)
}
//내가 저장할 사진에 주소값을 생성해준다.
val uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values)
try {
//uri null 아니면
if (uri != null) {
//쓰기모드로 파일을 열겠다!
var descriptor = contentResolver.openFileDescriptor(uri, "w")
if (descriptor != null) {
//파일 쓸 준비를 함
val fos = FileOutputStream(descriptor.fileDescriptor)
//비트맵을 JPED 방식으로 압축을 하는데 손실율 100. 70해도 눈으로 인지해도 상관없음
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos)
fos.close()
//리턴 후 exit
return uri
}
}
} catch (e:Exception) {
//예외 메세지 오류 확인
Log.e("Camera","${e.localizedMessage}")
}
return null
}
//새로운 파일명을 생성해주는 함수
fun newFileName() : String {
//시간으로 파일명을 만든다.
val sdf = SimpleDateFormat("yyyyMMdd_HHmmss")
val filename = sdf.format(System.currentTimeMillis())
return filename
}
//openCamera 함수에 startActivityForResult 실행수 카메라 찍은 사진을 아래 함수를 통해 돌려줌
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(resultCode == Activity.RESULT_OK) { //정상일때만 체크
when (requestCode) {
//카메라 이벤트
FALG_REQ_CAMERA -> {
if(data?.extras?.get("data") != null) {
//data로 비트맵으로 사진이 넘어온걸 imagePreview 적용
val bitmap = data?.extras?.get("data") as Bitmap
Log.d("파일이름1","${bitmap}")
//새로운 파일명
val filename = newFileName()
//이미지 저장
var uri = saveImageFile(filename,"image/jpg",bitmap)
Log.d("파일이름1","${uri}")
imagePreview.setImageURI(uri)
imagePreview.setImageBitmap(bitmap) //바로 저장
}
}
//갤러리 이벤트
FLAG_REQ_GALLERY -> {
val uri = data?.data
imagePreview.setImageURI(uri)
}
}
}
}
'Kotlin > Kotlin 팁' 카테고리의 다른 글
안드로이드 서비스 활용 (0) | 2020.10.14 |
---|---|
Android 스레드와 루퍼 타이머 앱 만들기 (0) | 2020.10.12 |
Android 카메라 사용 방법 (0) | 2020.10.06 |
ANDROID SQLite 데이터 베이스 사용 방법 2편 (0) | 2020.09.29 |
ANDROID SQLite 데이터 베이스 사용 방법 1편 (0) | 2020.09.28 |
댓글