TIL : 2023-09-06

이슬비·2023년 9월 6일
0

TIL

목록 보기
43/88

TIL : 스파르타코딩 Android 과정 7기

주의점

  • 매일 : TIL : today I learned 작성하기
  • github에 issue 꼼꼼히 쓰기
  • 주석 잘 적어 넣기

학습 목적 :

  1. Android 입문 학습에 이어 드디어 숙련주차가 시작됩니다. 2주동안 Android 앱개발 입문 학습을 바탕으로 개인과제와 팀 프로젝트를 완료함으로써 우리는 이제 막 숙련 학습을 위한 첫 허들을 넘었습니다. 든든한 기초 체력을 이용해서 앱개발 숙련주차도 섭렵해보도록 합시다!
  2. 앱개발 과정은 총 3가지(입문/숙련/심화)로 구성되어 있습니다. 그 중 우리는 이제 절반 왔습니다. 숙련 주차를 시작하게 되는 것이에요!
  3. 앱개발 숙련 과정을 통해서는 Android의 뷰바인딩과 어댑터뷰, 프래그먼트 등에 대해 배우게 됩니다.
  4. 숙련 과정에서 프래그먼트와 액티비티의 차이와 생명주기를 이해하고 다뤄보며 지식과 경험을 쌓습니다.

학습 목표 :

  • 뷰바인딩에 대해 이해하고 findViewById와의 차이점을 설명할 수 있습니다.
  • 어댑터 뷰의 기본 개념 및 종류를 이해하고 리스트 뷰와 그리드 뷰의 설정 방법을 이해한다.
  • 커스텀 항목 뷰를 정의하는 방법을 이해하고 RecyclerView를 사용하는 방법을 이해한다.
  • 프래그먼트의 기본개념 및 프래그먼트 생명주기를 이해한다.
  • 태블릿용 및 스마트폰용 디바이스에서 프래그먼트를 재 사용할 수 있는 방법을 실습한다.
  • 다이얼로그가 무엇인지 알고 구조에 대해 이해했습니다.
  • 알림을 생성하고 중요도 순서를 이해했습니다

오늘 계획 :

  • 오전
    • 09:00 ~ 10:00 : 오늘 계획 세우기
      • 오늘 계획 (Task)
        • 팀 회의 : 데일리 스크럼 & 역할 분담
        • 팀 프로젝트
        • 후발대 강의 : 11시
        • TIL 작성하기
        • 팀 회의 : 마무리 회고 진행
    • 10:00 ~ 11:00 : 팀 프로젝트
      • 디테일 페이지 : 전화번호 넘기기
    • 11:00 ~ 12:00 : 후발대 강의 5주차
      • 강의 듣기
  • 집중 코딩
    • 13:00 ~ 18:00 : 팀 프로젝트
      • 마이페이지에서 알림버튼 숨기기
      • 연락처에서 전화번호 가지고 오기
  • 저녁
    • 19:00 ~ 20:30 : TIL 작성하기 & 노션 정리하기
      • TIL 작성하기
    • 20:30 ~ 21:00 : 마무리 회고 진행
      • 팀 회의 : 마무리 회고 진행

오류 :

오류 수정 방법 : Caused by: org.gradle.api.GradleException: 'compileDebugJavaWithJavac' task (current target is 17) and 'compileDebugKotlin' task (current target is 1.8) jvm target compatibility should be set to the same Java version.

안드로이드 스튜디오 Java Version 1.8에서 11 로 수정

사용 기능 :

[Android/Kotlin] 안드로이드 주소록 앱(Contacts)에서 연락처 상세 정보 가져오기, cursor의 count가 0일 때 or moveToFirst() 실행 안될 때 문제 해결

class MainActivity : AppCompatActivity() {
    lateinit var binding: ActivityMainBinding
    lateinit var requestLauncher: ActivityResultLauncher<Intent>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // 퍼미션 허용했는지 확인
        val status = ContextCompat.checkSelfPermission(this, "android.permission.READ_CONTACTS")
        if (status == PackageManager.PERMISSION_GRANTED) {
            Log.d("test", "permission granted")
        } else {
            // 퍼미션 요청 다이얼로그 표시
            ActivityCompat.requestPermissions(this, arrayOf<String>("android.permission.READ_CONTACTS"), 100)
            Log.d("test", "permission denied")
        }

        // ActivityResultLauncher 초기화, 결과 콜백 정의
        requestLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            if (it.resultCode == RESULT_OK) {
                Log.d("test", "Uri : ${it.data!!.data!!}")
                val cursor = contentResolver.query(
                    it.data!!.data!!,
                    arrayOf<String>(
                        ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                        ContactsContract.CommonDataKinds.Phone.NUMBER,
                        ContactsContract.Contacts.PHOTO_URI,
                        ContactsContract.Contacts._ID,
                    ),
                    null,
                    null,
                    null
                )
                Log.d("test", "cursor size : ${cursor?.count}")

                if (cursor!!.moveToFirst()) {
                    val name = cursor.getString(0)
                    val phone = cursor.getString(1)
                    val photoURI = cursor.getString(2)
                    val id = cursor.getString(3)
                    binding.text.text = "$name"
                }
            }
        }

        binding.mainBtn.setOnClickListener {
            // 주소록 앱 연동
            val intent = Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Phone.CONTENT_URI)
            requestLauncher.launch(intent)
        }
    }

    // 다이얼로그에서 퍼미션 허용했는지 확인
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.d("test", "permission granted")
        } else {
            Log.d("test", "permission denied")
        }
    }
}

팀(or 개인) 프로젝트 :

팀 프로젝트 : 연락처 앱 만들기

https://github.com/Android-Team-119/Android_Team119_Project

  1. 상세 정보 (ContactDetailFragment)
    • 연락처의 상세 정보를 표시합니다.
    • 필수 구성 요소: ConstraintLayout, ImageView, Button, Bundle, ScrollView
    • 선택된 연락처의 이름, 전화번호, 사진, 이메일 주소, 기능 버튼, 이벤트 정보(선택) 등을 표시합니다.
    • 상세 정보를 표시할 때 Bundle을 이용하여 데이터를 전달해 보세요.
  2. 마이 페이지 (MyPageFragment)
    • 사용자의 상세 정보를 표시합니다.
    • 필수 구성 요소: ConstraintLayout, ImageView, Button, ScrollView
    • 사용자의 사진, 이름, 전화번호 등을 표시합니다.

아쉬운 점 or 앞으로의 계획 :

팀프로젝트

profile
개발꿈나무

0개의 댓글