wanna be dev 🧑‍💻

Cool 하고 Sick한 개발자가 되고 싶은 uzun입니다

A.K.A. Kick-snare, hyjhyj0901, h_uz99 solvedac-logo

Android/Challenge

패스트캠퍼스 챌린지 32일차

Kick_snare 2022. 2. 24. 17:42
728x90

32일차

30개 프로젝트로 배우는 Android 앱 개발 with Kotlin 초격차 패키지 Online

강의 목표


  • 프로젝트를 따라해보며 앱개발에 필요한 기술을 학습할 수 있습니다.
  • 프로젝트를 따라해보며 앱개발에 필요한 기술을 학습할 수 있습니다.
  • 앱 개발시 원하는 기능을 구현하기 위해 어떤 기술이 필요한 지 알 수 있습니다.
  • 디자인 아키텍처 패턴, 비동기 처리 등 효율적인 앱 개발 방법을 익힐 수 있습니다.

목차 02 Basic - Ch04. 계산기


  • 인트로
  • 계산기 UI 그리기 - 1
  • 계산기 UI 그리기 - 2
  • 계산기 UI 그리기 - 3
  • 계산기로 계산하기 - 1
  • 계산기로 계산하기 - 2
  • 계산 기록 저장하기 - 1
  • 계산 기록 저장하기 - 2
  • 아웃트로

아웃트로

  • Layout
    • Table Layout을 사용해보았다
    • LayoutInflater 을 사용하여 새로운 레이아웃을 코드로 만들어보았다
      • 코드로 생성한 레이아웃을 View에 추가하였음
  • Thread
    • Thread를 생성하고 Runnable 객체를 만들고서 비동기로 처리
    • runOnUiThread로 타 쓰레이에서 메인 쓰레드로 다시 돌아와서 작업을 처리할 수 있었다
  • Room
    • abstract 클래스를 생성하여 Entity들을 설정 (PK, columns)
    • Dao 인터페이스를 만들어 메소드를 만들었다
  • Kotlin
    • 확장함수
      • String.isNumber() 와 같이 존재하지 않는 메소드를 추가할 수 있었다

목차 02 Basic - Ch05. 전자액자


  • 인트로
  • Android기기 권한 받아오기
  • 권한을 통해 사진 가져오기
  • 사진 가져와서 목록 구성하기
  • 액자 화면 구성하기
  • Activity Lifecycle 을 알아보고 완성도 높이기
  • 아웃트로

인트로

사용해볼 기능

  • Layout
    • 가로 화면으로 그리기
  • Android Permission 사용하기
  • View Animation 사용하기
  • Activity Lifecycle 알아보기
  • Content Provider
    • SAF (storage access framework)

전자액자 앱의 기능

  • 저장소 접근 권한을 이용하여 로컬 사진을 로드할 수 있음.
  • 추가한 사진들을 일정한 간격으로 전환

Android기기 권한 받아오기

사용자의 사진을 가져오기 위해 사진첩에 접근하기 위한 권한이 필요하다

일련의 과정은 아래와 같다

  1. 앱이 이미 권한이 부여되었는지?
  2. 앱에 권한이 필요한 이유 설명
  3. 권한 요청을 요청

전자 액자 앱에서 필요한 기능중 첫번째는 사진 첩에 접근하여 사진을 가져오는 기능이다.

버튼을 눌렀을 때 권한을 요청하고 기능을 수행하도록 해보자

private fun initAddPhotoButton() {
    addPhotoButton.setOnClickListener {
        when {
            ContextCompat.checkSelfPermission(
                this,
                android.Manifest.permission.READ_EXTERNAL_STORAGE
            ) == PackageManager.PERMISSION_GRANTED -> {
                // TODO 권한 OK 갤러리에서 사진 선택
            }
            shouldShowRequestPermissionRationale(android.Manifest.permission.READ_EXTERNAL_STORAGE) -> {
                // TODO 교육용 팝업 확인 후 권한 팝업을 띄우는 기
								showPermissiongContextPopup()
            }
            else -> {
                requestPermissions(arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE), 1000)
            }
        }
    }
}

사진 추가 버튼을 눌렀을 때의 핸들러를 등록하기 위한 초기화 함수이다.

핸들러에서는 when문을 이용하여 3가지 경우를 구분하고 있는데,

  1. 권한이 수락된 경우 → 사진을 선택
  2. 권한이 이전에 거절된 경우 → 권한이 필요함을 고지 후 권한 요청
  3. 바로 권한을 요청 (동의한 경우)

권한이 수락 되었는지 check 하기 위해 ContextCompat.checkPermission() 함수로 확인 가능하다

shouldShowRequestPermissionRationale 은 이전에 사용자가 권한을 거부한 경우 true를 리턴

requestPermissons() 함수는 여러개의 권한들을 array로 받는데, 위의 경우 외부 스토리지 접근 권한 하나만 필요함으로 arrayOf() 함수로 문자열을 배열로 만들다

showPermissionContextPopup 함수를 정의해주도록하자.

권한이 필요함을 알려주고, 동의하면 권한을 요청하도록 한다

private fun showPermissionContextPopup() {
    AlertDialog.Builder(this)
        .setTitle("권한이 필요합니다")
        .setMessage("전자액자에서 앱을 불러오기 위한 권한이 필요합니다")
        .setPositiveButton("동의") { _, _ ->
            requestPermissions(arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE), 1000)
        }
        .setNegativeButton("취소") { _, _ -> }
        .create()
        .show()
}

이뿐 만이 아니라 권한을 가져오기 위해서는 AndroidManifest.xml 에 추가해야한다

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

수강인증샷

링크

https://bit.ly/37BpXiC

 

 

 

 

 

728x90