android

Android

카카오톡 공유 앱 이름 바꾸기

개인 프로젝트를 진행하며 실험을 통해 알아낸 방법이다. 내가 공식 문서를 제대로 안 읽어서 못 찾은 내용일 수 있다. 먼저, 내가 말하는 카카오톡 공유 기능은 아래 사진과 같다. 여기서 내가 바꾸고 싶은 부분은 구매하기, 공유하기 버튼 밑에 있는 "카카오스타일" 이라는 부분이다. 저게 뭐라고 그러는걸까 별 생각없이 넘어갈 사람도 있겠지만 이상한 텍스트가 써있으면 위화감이 들 것 같았다. 내가 찾은 방법을 공유해보겠다. 1. kakao developers에 로그인한다. 2. 내 애플리케이션으로 이동한다. 3. 일반 탭에 들어가 앱 이름을 바꾼다. 그럼 해결!! 이렇게 끝내고 싶었는데 앱 이름 옆에 아이콘도 없어 불편했다. 이 문제는 똑같은 일반 탭에서 앱 아이콘을 등록해주면 된다.

Android

Codelab으로 LiveData 알아보기 - 8. 정리(完)

LiveData LiveData는 생명 주기를 인식하는 관찰 가능한 데이터 홀더 클래스이다. 데이터가 업데이트될 때 UI가 자동으로 업데이트되도록 LiveData를 사용할 수 있다. LiveData는 데이터를 감싸서 가지고 있다. LiveData는 생명 주기를 인식하는데 이는 started, resumed 같이 활성 상태에 있는 옵저버만 업데이트를 한다. LiveData를 추가하기 위해 ViewModel에 있는 데이터 변수를 LiveData 혹은 MutableLiveData로 변경한다. MutableLiveData는 값이 변경 가능한 LiveData 객체이다. MutableLiveData는 제네릭 클래스이기에 어떤 데이터를 가지고 있는지 명시해주어야 한다. LiveData가 가지고 있는 데이터 값을 변경..

Android

Codelab으로 LiveData 알아보기 - 7. Add the Play Again Button

이번에는 점수 화면에 Play Again 버튼을 추가하고 LiveData를 사용하여 클릭 리스너를 구현할 것이다. 해당 버튼은 점수 화면에서 다시 게임 화면으로 이동하는 이벤트를 발생시킨다. 먼저, 우리가 받아놓은 코드에는 이미 Play Again 버튼이 있지만 숨겨져 있다. 1. score_fragment.xml에서 play_again_button의 visibility를 보이도록 처리한다. 2. ScoreViewModel에 _eventPlayAgain이라는 Boolean값을 가지는 LiveData객체를 추가한다. 이 객체는 점수 화면에서 게임 화면으로 이동하는 이벤트를 저장하기 위해 만들었다. private val _eventPlayAgain = MutableLiveData() val eventPlay..

Android

Codelab으로 LiveData 알아보기 - 6. Add LiveData to the ScoreViewModel

이번에는 score를 ScoreViewModel의 LiveData 객체로 변경하고 옵저버를 붙일 것이다. 이번 작업은 4번의 LiveData를 GameViewModel에 추가한 작업과 비슷할 것이다. 앱의 모든 데이터가 LiveData를 사용하도록 하기 위해 ScoreViewModel에 이러한 변경점을 적용한다. 1. ScoreViewModel의 score 변수를 MutableLiveData로 변경한다. _score 변수를 네이밍 컨벤션을 지켜 이름을 변경하고 backing property를 추가한다. private val _score = MutableLiveData() val score: LiveData get() = _score 2. GameViewModel의 초기화 블럭 안에서 _score를 초기화..

Android

Codelab으로 LiveData 알아보기 - 5. Add a game-finished event(2)

저번 글에서 문제는 토스트 메시지가 프래그먼트가 기기 회전 등의 이유로 재생성될 때마다 다시 보이는 것이었다. 바로 본론으로 들어가보자. Reset the game-finished event 보통, LiveData는 데이터 변경이 있을 때만 업데이트를 옵저버에게 전달한다. 이 행동의 예외 사항은 옵저버가 비활성 상태에서 활성 상태로 변경될 때도 업데이트를 수신한다는 것이다. 이것이 게임 종료에 대한 토스트가 반복적으로 발생하는 이유이다. 화면 회전 이후 GameFragment가 재생성되면 비활성에서 활성 상태로 변경되고, 옵저버는 기존 ViewModel에 다시 연결된다. 그리고, 데이터를 수신한다. 그럼 gameFinished 메소드가 다시 호출되고, 토스트가 표시된다. GameViewModel안의 ev..

Android

Codelab으로 LiveData 알아보기 - 4. Add a game-finished event(1)

현재 우리가 수정한 앱은 'End Game' 버튼을 누르면 점수 화면으로 넘어간다. 우리는 플레이어가 모든 단어를 거치고나면 점수 화면으로 이동하기를 원한다. 플레이어가 마지막 단어를 끝내면 게임이 자동으로 끝나서 버튼을 누를 필요가 없도록 만들고 싶다. 이 기능을 구현하기 위해 우리는 이벤트가 발생되어야 하고 ViewModel에서 모든 단어가 보여졌을 때 프래그먼트에 전달되어야 한다. 이를 위해서는 LiveData 옵저버 패턴을 적용해야 한다. Observer pattern은 observable(Subject)과 observer 사이의 통신을 정의한다. 이 앱의 LiveData의 경우, 위 그림의 Subject는 LiveData 객체이다. 그리고, Observer들은 프래그먼트와 같은 UI contro..

Android

종종 간과하는 문제 해결 에피소드(feat. Handler, Thread)

오늘은 회사에서 마주한 에러를 해결했던 에피소드를 적어보고자 한다. 사실, 되게 사소하지만 크리티컬한 문제였다. 가장 먼저 오늘 마주한 에러를 다시 재현하기 위해 내 노트북에서 샘플앱을 만들었다 ㅋㅋㅋㅋㅋ 마주한 에러 로그를 첨부하겠다. java.lang.RuntimeException: Can't create handler inside thread Thread[Timer-0,5,main] that has not called Looper.prepare() at android.os.Handler.(Handler.java:227) at android.os.Handler.(Handler.java:129) at android.app.Dialog.(Dialog.java:138) at android.app.Dialo..

Android

구글 플레이 개발자 이름 주의 사항(오늘도 여전한 구글)

바로 본론으로 가보자면, 작년에 올려두었던 데모 앱이 갑자기 정책 위반으로 삭제되었다는 메일이 왔다. 작년에 올리고 손도 안댔는데 무슨 정책위반이야? 하고 메일을 열어보니 더 황당한 문제가 있었다. 내 블로그 이름처럼 플레이 스토어의 개발자 이름은 bonustrack02였다. 하지만, 개발자 이름이 정책 위반이라는 것이었다. (이 무슨 미친 소리인가 싶었다. 1년이나 됐는데 이제와서?) 더 이상 사용하지 않을 앱일지라도 기분이 나빠 이의 제기를 했다. 내 닉네임이 어떤 정책을 위반했길래 앱이 삭제되었을까? 나 참... 어이가 없었다. 그럼 개발자 이름이 만약 'freedom02' 이런 식이면 이것도 정책 위반이냐고;; 뭐 아무튼 나는 슈퍼 을이니깐 곧바로 이름을 변경했다. 무슨 볼드모트냐고 내가 내 닉네..

Android

원하는 화면에서 앱이 백그라운드로 진입 시 종료시키기(feat. Application)

회사에서 진행하는 프로젝트 요구 사항 중 특정 화면에서 앱이 백그라운드로 진입하면 앱을 종료시키는 상황이 있었다. 고민이 많았다. 매우 단순히 Activity가 onStop될 때, 꺼버리자! 라는 생각을 했는데 당연하게도 아주 우매한 생각이었다. 왜냐하면, 예를 들어 메인 페이지에서 설정 화면으로 이동할 때 onStop이 호출되고 그냥 앱이 종료되었다. (이것도 생각못하냐고 하면 뭐... 할 말이 없다) 그럼 어떻게 할까 일단 앱이 백그라운드로 진입할 때 무조건 onDestroy까지 호출될 수는 없었다. 여러 고민을 거쳐 결국 라이프사이클을 사용해 구현해냈다. 1. 먼저, 모듈 수준의 build.gradle에서 라이브러리를 추가해주어야 한다. implementation 'androidx.lifecycle..

Android

Android Studio Waiting For Debugger 현상 해결

오늘은 안드로이드 스튜디오가 나를 아침부터 지겹게 만들었다. 바로, 디버거가 제대로 안 붙는 버그 때문이었다.(거지같은..) 저녁을 먹고 나서야 해결했었는데 그 전에는 그냥 일반모드로 실행하고 로그캣에서 크래시날 때마다 에러를 확인하며 코드를 수정했다. 그렇게 버티다 결국 디버그모드가 필요했는데 제대로 실행되지 않았다. 스튜디오 하단의 task들은 정상적으로 수행이 되었고 빌드까지 successful 이라면서 정작 디바이스 화면에는 이 화면만 보이고 있었다. 결국 짜증이 극도로 올라온 상태에서 동료들과 식사를 마치고 다시 회사로 돌아오며 부장님께 슬쩍 여쭤보았다. 부장님, 혹시 디버그 모드로 계속 재실행하다보면 안될 때 어떻게 하세요? 휴대폰 껐다 키고, 스튜디오 캐시 날려봐 아까 오전부터 스튜디오 캐시..

BonusTrack02.dev
'android' 태그의 글 목록 (8 Page)