Kotlin/TIL

TIL (04.22)

내손은개발 🐾 2024. 4. 22. 21:54

Android 주소록 프로젝트


 

공통

manifests

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

만약

Permission exists without corresponding hardware <uses-feature android:name="android.hardware.telephony" required="false"> tag

 

이런 오류가 발생한다면 밑에 코드를 추가해줘야한다.

    <uses-feature
        android:name="android.hardware.telephony"
        android:required="false" />

발생 원인 ?

전화 권한을 허용하고 있지만 해당 기능에 대한 하드웨어가 기기에 없기 때문에 발생한다.

앱이 전화 기능을 지원하지 않는 기기에서도 작동할 수 있도록 필요한 경우에따라 위에 코드를 추가한다.

 

 

 

전화걸기

    private fun setUpCall() {
        binding.ivCall.setOnClickListener {
            binding.tvNumber.text = "01012345678" //<<전화번호 값 입력
            val phoneNumber = binding.tvNumber.text
            val callUriSwipedPerson = Uri.parse("tel:$phoneNumber")
            // 권한 확인
            if (ContextCompat.checkSelfPermission(
                    requireContext(),
                    Manifest.permission.CALL_PHONE
                ) != PackageManager.PERMISSION_GRANTED
            ) {
                requestPermissions(
                    arrayOf(Manifest.permission.CALL_PHONE),
                    REQUEST_CALL_PERMISSION
                ) //todo deprecated 수정
            } else {
                startActivity(Intent(Intent.ACTION_CALL, callUriSwipedPerson))
            }
        }
    }

 

문자 보내기

    private fun setUpMessage() {
        binding.ivMessage.setOnClickListener {
            binding.tvNumber.text = "01012345678" //<<전화번호 값 입력
            val phoneNumber = binding.tvNumber.text
            val sendUriSwipedPerson = Uri.parse("smsto:$phoneNumber")
            if (ContextCompat.checkSelfPermission(
                    requireContext(),
                    Manifest.permission.SEND_SMS
                ) != PackageManager.PERMISSION_GRANTED
            ) {
                requestPermissions(arrayOf(Manifest.permission.SEND_SMS), REQUEST_CALL_PERMISSION) //todo deprecated 수정
            } else {
                startActivity(Intent(Intent.ACTION_SENDTO, sendUriSwipedPerson))
            }
        }
    }

 

 

 

다음으로 이미지를 선택해서 받아와야한다.

이미지를 받는건 괜찮은데 권한에 대한 얘기가 없다..

 

기존코드는 어쩔 수 없이 권한이 없다면 dialog를 띄워 권한을 허용해주도록 설정하고 있는데 방법을 찾았다.

바로 photo picker이다.

 

 

android 9 /10을 기준으로 나뉘게 되는데

9이하의 경우에는 내부/외부 저장소 디렉터리를 하나로 통으로 관리하면서 개별적인 공간으로 나눠져있었다. 만약 통째로 권한이 있다면 권한을 다 가져올 수 있었다.

하지만

10이상으로 넘어오면서 보안이 되었다. 공용공간과 개별공간으로 나눠지는 건 똑같지만 미디어를 분리하기 시작했다. 예를 들어 사진, 비디오, 문서 등등..

 

그 나눠진 것들 안에도 개별 공간을 구분을 시작했다. 권한을 전부 뺐어가는 대신에 개별 공간에 접근하는 권한을 안줘도 되도록 수정되었다.

 

맞게 정리한지 모르겠다. 아직 공식문서에 있는 코드를 읽고 사용만 해본 상태이다. 더 정리해서 올릴 예정이다.

확실한건 Photo Picker를 사용할 것이다.

 

 

 

 

 

ref

 

앱별 파일에 액세스  |  Android Developers

DataStore offers a more modern way of storing local data. You should use DataStore instead of SharedPreferences. Read the DataStore guide for more information. 이 페이지는 Cloud Translation API를 통해 번역되었습니다. 앱별 파일에 액세

developer.android.com

 

 

저장소 액세스 프레임워크를 사용하여 파일 열기  |  Android 개발자  |  Android Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 저장소 액세스 프레임워크를 사용하여 파일 열기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Androi

developer.android.com

 

 

사진 선택 도구  |  Android Developers

DataStore offers a more modern way of storing local data. You should use DataStore instead of SharedPreferences. Read the DataStore guide for more information. 이 페이지는 Cloud Translation API를 통해 번역되었습니다. 사진 선택 도구 컬

developer.android.com

 

 

 

'Kotlin > TIL' 카테고리의 다른 글

TIL (04.29) - LiveData 실습  (0) 2024.04.29
TIL (04.23)  (0) 2024.04.23
TIL(04.18)  (1) 2024.04.18
TIL (04.17)  (0) 2024.04.17
TIL (04.16)  (0) 2024.04.16