하루에 0.01%라도 성장하자
반응형

Develop/Android 71

안드로이드 AudioManager Stream 별 설명

Android AudioManager에 구성되어 있는 STREAM 채널별 설명은 다음과 같습니다. STREAM_MUSIC: 음악, 오디오 북, 팟캐스트와 같은 미디어 재생에 사용되는 스트림입니다. STREAM_ALARM: 알람에 사용되는 스트림입니다. STREAM_RING: 전화 벨소리에 사용되는 스트림입니다. STREAM_SYSTEM: 시스템 음성, 예를 들어 내비게이션 안내 음성에 사용되는 스트림입니다. STREAM_VOICE_CALL: 음성 통화에 사용되는 스트림입니다. STREAM_DTMF: DTMF 신호에 사용되는 스트림입니다. STREAM_TTS: 음성 합성 음성에 사용되는 스트림입니다. STREAM_ACCESSIBILITY: 접근성 서비스에 사용되는 스트림입니다. STREAM_NOTIFICA..

Develop/Android 2023.07.05

Firebase Dynamic Link not Working in targetSDKVersion 33

앱 홍보용으로 파이어 베이스 다이나믹 링크를 만들어 QR로 제공하는 중이다. 기능은 단순하게, QR을 스캔하여 클릭하면 앱이 설치되어 있지 않으면 스토어로 이동 앱이 설치되어 있으면 실행 되는 형태. 그런데 Android 12 까지는 정상적으로 실행되는데, Android 13 에서 문제가 발생했다. Android 13 문제 발생 증상 1. 앱이 설치되어 있지 않으면 정상적으로 스토어로 이동됨 2. 앱이 설치되어 있는데 실행되는 로딩바 뜨다가 아무런 동작 하지 않음 - 원래는 앱이 실행되어야 함. 원인을 확인해 보니 Android sdk 33 부터 intentFilter 설정이 필요했다. 이렇게 등록 해주면 된다. host는 파이어베이스에 다이나믹 링크로 만든 링크를 해주고, path로 구분하여 실행할 링..

Develop/Android 2023.04.24

Android AD_ID permission targetSDKVersion 33

어느날 잘 동작하던 앱을 업데이트 해야 하는 상황이라 aab bundle로 말아서 배포하려고 앱을 검토하고 있었다. 구글 콘솔에 앱 심사를 올리려고 앱을 올렸는데 갑자기 AD_ID 이슈가 터졌다. 확인해 보니 targetSDKVersion 33 을 타겟하는 경우 내가 AD_ID를 직접 사용하지 않아도, 내가 사용하려고 하는 외부 SDK에 AD_ID를 사용하게 되면 이걸 명시해야 하는 정책이 생겼더라. 내가 사용하는 SDK중 어떤게 AD_ID를 사용하나 봤더니 애널리틱스... 이건 뺄 수 없는 SDK였기 때문에 해결방법을 찾아봤다. 해결방법 1. AndroidManifest.xml 에 권한 선언하기 2. 구글 콘솔에 앱 콘텐츠 정책 변경 이 방법들은 둘다 해야 하는 방법이 아닌, 둘중 하나만 하면 되는 방..

Develop/Android 2023.04.05

RecyclerView No layout manager attached; skipping layout

Android RecyclerView를 사용하는데, 정상적으로 아이템을 바인딩 했는데도 보이지 않는 이슈가 잇었다... 이때 아무래도 내가 Flow를 처음 도입해서 이렇게 어이없는 실수를 했을지도 .. (하! ) No layout manager attached; skipping layout Logcat에는 위와 같은 에러가 발생했고, 이 에러를 보는데는 생각보다 오래 걸렸다... 하 확인해 보니 내가 recyclerView에 레이아웃 매니저를 등록하지 않아서 발생하는 이슈였다.. 이렇게 꼭 레이아웃 매니저를 등록해야 에러가 발생하지 않는다.

Develop/Android 2023.01.02

Android EditText 특수문자 제어, NextFocus, 엔터키 처리

안드로이드 EditText를 사용하면 크게 사용하는 것 중 하나가 특수문자 제어 엔터키 처리 라고 할 수 있다. 특수문자 제어 특수문자의 경우 정규식을 통해서 처리 할 수 있다. /**1. 정규식 패턴 ^[a-z] : 영어 소문자 허용 2. 정규식 패턴 ^[A-Z] : 영어 대문자 허용 3. 정규식 패턴 ^[ㄱ-ㅣ가-힣] : 한글 허용 4. 정규식 패턴 ^[0-9] : 숫자 허용 5. 정규식 패턴 ^[ ] or ^[\\s] : 공백 허용 **/ private val editTextFilter = InputFilter { source, start, end, dest, dstart, dend -> val ps = Pattern.compile("[ㄱ-ㅎㅏ-ㅣ가-힣a-z-A-Z0-9()&_\\s-]+$") if..

Develop/Android 2022.12.26

Fragment Commit, CommitAllowingStateLoss 그리고 재현방법

이번에는 Fragment 중 Commit에 관한 내용을 작성한다. 서비스 중인 앱에서 아래와 같은 크래쉬 이력이 남았다. Can't access the Fragment View's LifecycleOwner when getView() is null i.e., before onCreateView() or after onDestroyView() 원인을 찾아보니 Activity 에서 onSaveInstanceState 가 호출된 후 Fragment 에서 commit 이 동작되서 발생한 문제였다. onSaveInstanceState의 호출 시점은 여기를 참고해 보면 좋겠다! 해결 방법으로는 commit 대신에 commitAllowingStateLoss 를 실행해주면 해결된다는 레퍼런스를 쉽게 찾을 수 있었다. ..

Develop/Android 2022.11.23

Livedata setValue와 postValue 그리고 Cannot invoke setValue on a background thread

안드로이드를 개발할 때 요즘 많이들 livedata를 사용한다. state관리에도 용이하고 UI를 즉각 반영할 때도 좋다 livedata를 다루는 여러 가지 기술도 있지만 오늘은 setValue postValue 에 대한 기록을 남기려고 한다. 내가 겪은 코드는 아래와 같다 Cannot invoke setValue on a background thread 백그라운드 쓰레드에서 setVlaue를 호출 할 수 없습니다 :( setValue setValue는 MainThread에서 동작하는 방식이다. // viewModel private val _textStr: MutableLiveData = MutableLiveData() val textStr: LiveData get() = _textStr ... _tex..

Develop/Android 2022.11.10

Compose Camp!

이번에 컴포즈 캠프를 한다고 해서 신청했고, 이제 시작하게 되었다 원래는 11월 1일 시작이었는데 국가 애도기간에 따라 11월 7일부터 하는 것으로 되었다.. ( 삼가 고인의 명복을 빕니다.. ) 아마 작년이었을거 같은데.. 컴포즈 오픈에 맞춰서 컴포즈를 미리 배울 수 있도록 GDG에서 했었는데 나는 결국 완주하지 못했다 ㅠ ( 변명이지만 하필 그 때 프로젝트가 미쳤었다.. ) 이번에는 꼭 완주하길 바라면서 신청했고...히히 신청하면 초급코스, 중급코스가 있다고 하는데.. 난 중급코스로 배정(?) 되었다.. 초급이 더 재밋을거 같은데 후 이전과는 다르게 이렇게 멋진 홈화면을 제공하고 있어서 그런가 한번이라도 더 사이트를 들어가게 되는 것 같다. 현 회사에서 컴포즈를 도입하기에는 아직 너무나도 먼 일이지만..

Develop/Android 2022.11.08

Android - Toast가 중첩되어 보여질 때

앱을 개발하다 보면 Toast를 많이 사용하곤 한다. 이때 Toast를 띄우는 버튼을 여러번 누를 경우 Toast가 최근것만 보이지 않고 밀렸던 Toast가 뜨게된다. 사실 사용자 경험상 가장 최근에 발생한 안내문구만 Toast 형태로 제공하는 것이 좋다. Flow Flow를 확인해보면 생각보다 간단한 로직이다. Code // 전역변수 private var toast: Toast? = null fun showToast(msg: String) { toast?.cancel() toast = Toast.makeText(GlobalApplication.getContext(), msg, Toast.LENGTH_SHORT) toast?.show() } // 사용법 showToast("안녕하세요") 이렇게 작성하면 ..

Develop/Android 2022.10.19

Android - java.lang.IllegalArgumentException: No suitable parent found from the given view. Please provide a valid view

이번에 안드로이드 스낵바를 만들다가 Activity 에서 노출되는 것을 Fragment로 옮겼다. 그런데, Activity에서는 문제가 없었는데 Fragment에서는 장애가 발생 했다. java.lang.IllegalArgumentException: No suitable parent found from the given view. Please provide a valid view 이유는 무엇인가 확인해 보았더니 기존에 Activity에서는 onResume에서 showSnackbar를 실행했는데, 똑같이 Fragment에서도 onResume에서 실행했는데 발생했고, 해당 에러의 메세지는 showSnackbar를 하려고 하는데, 어디다 해야하는지 모르겠어!!! View가 없는데? 라는 에러다. 따라서 Fra..

Develop/Android 2022.09.28
반응형