이 글은 유데미 강의 Android 12 및 Kotlin 개발 완전 정복을 참고하여 작성하였습니다.
작성자 : 이나영
개발환경은 Windows, Android Studio입니다. (본문3)
1. part 135
coroutine을 만드는데, suspend 키워드를 이용해
private suspend fun으로 작성한다
이미지를 저장할 변수를 만들고 with contact를 사용하기 위해 import로 옮겨온다
->gradle 파일로 이동해 dependency 추가해주기
그래들에 코드를 작성하고 동기화가 되면main activity로 돌아가 withContext를 사용할 수 있는 것이다
Dispatchers.IO로 이미지의 입출력을 조정한다
if문으로 비트맵에 주어진 비트맵이 null인지 아닌지 확인하고 작업이 실행되게 한다(null이어도 오류가 나지 않게)
Bitmap.CompressFormat으로 이미지를 PNG로 압축한다
기기 안에 이미지를 저장할 곳을 지정한다
File.separator사용->위치를 전달해서 저장할 때 위치를 이름에 포함시켜서 저장하도록 만드는 것
FileOutputStream을 만들고 write함수, close 함수
전체 과정을 간단히 하자면,
1)파일을 출력하는 스트림을 만들고, 출력 후
2)파일 출력 시스템을 닫은 후
3)다음 스트림과 관련된 시스템 리소스 해제
실행하기 위해서 onCreate 메소드로 이동해 버튼을 만들어준다
Manifest.Permission.WRITE_EXTERNAL_STORAGE
읽기 권한과 쓰기 권한을 동시에 요청할 필요는 없지만 모든 버전에 두 함수가 포함되었는지는 확인해야한다
private fun isReadStorageAllowd를 만들고
불리언 타입으로 설정해주면 확인할 수 있다
return값을 ==이 if절처럼 승인여부를 확인할 수 있도록 해준다
그 후에는
1)뷰에서 이미지를 가져와서 drawable view와 합친다
2)프레임 레이아웃을 전달해서 뷰를 bitmap으로 전환한다
3)saveBitmapFile로 전달해서 background에 저장한다
실행결과:
뭔가를 그리고 저장버튼을 누르면 저장된 위치가 메시지로 뜬다.
이미지를 보고싶다면
파일로 가서 SDK, Android, data를 순서대로 누르고
앱의 path인 cache를 선택하면 저장된 이미지를 전부 볼 수 있다.
2. part 136
맨위에 custom progress dialog variable을 만든다
1) Linear layout 사용
2) gravity 는 center로 설정
3) progress bar를 사용해 모양(원)을 만들고 위치와 높이, 문구(please wait...)를 설정
xml file 로 content view를 설정해 progress dialog가 보이게끔 만든다
이때 progress dialog를 가리는 메소드도 만들어야 진행이 모두 끝났을 때 없어질 수 있으므로
null인지 확인하고 .dismiss() 함수를 사용해 없애준다
3. part 137
private fun shareImage()
MediaScannerConnection을 만든다
->파일로부터 미터 데이터를 읽어내고 media content provider 에 파일을 추가한다
미디어 스캐너 연결 클래스의 클라이언트에
미디어 검색 파일의 uri를 반환한다
scanFile()메소드를 불러오고
미디어 스캐너와 연결되면 호출한다
Activity action은 Activity chooser를 표시하는데
사용자가 진행하기 전에 원하는 항목을 선택할 수 있게 한다
마지막으로 shareImage 메소드를 적절한 위치에서 호출해준다
답장전달
|
'GDSC HUFS 4기 > Kotlin Team #7' 카테고리의 다른 글
[7팀] 드로잉 앱 안드로이드 12 part 7 (0) | 2022.11.29 |
---|---|
[7팀] 드로잉 앱 안드로이드 12 part 6 (0) | 2022.11.29 |
[7팀] 드로잉 앱 안드로이드 12 part 3 (0) | 2022.11.16 |
[7팀] 드로잉 앱 안드로이드 12 part 4 (0) | 2022.11.14 |
[7팀] 드로잉 앱 안드로이드 12 part 2 (0) | 2022.11.14 |