안드로이드 192

startActivityForResult 및 ActivityResultLauncher에 대한 명확한 이해

startActivityForResult() 및 ActivityResultLauncher 이해 개발중에 MainActivity를 다시 호출되면서 onNewIntent에서 처리해야할 작업이 있었는데 제대로 호출이 되지 않는 상황이 발생하였습니다! startActivityForResult() 및 ActivityResultLauncher에 대해 이야기하려고 합니다. startActivityForResult와 onNewIntent 안드로이드 앱을 개발하다보면 다른 액티비티를 실행하고 해당 액티비티로부터 결과를 받아야 하는 경우가 있습니다. 이 때 우리는 주로 startActivityForResult() 메서드를 사용합니다. 이 메서드를 사용하면 호출한 액티비티가 실행 중인 동안 다른 액티비티를 실행하고, 그 결..

안드로이드 2024.03.14

SingleLiveEvent에 대해 알아보자 (사용법)

SingleLiveEvent란? LiveData를 사용하던 도중 화면에 진입했을 때 observe가 되면서 재호출이 되는 경우가 있다. 예) 휴대폰 설정 후 화면 진입시 LifeCycle에 의해 다시 호출 등 View의 재활성화 (start나 resume 상태로 재진입)가 되면서 LiveData가 observe를 호출하여, 불필요한 Observer Event까지 일어나는 경우가 있습니다. 이를 방지하기 위해 기존 LiveData를 상속하여 만들어낸 것이 SingleLiveEvent입니다. 여러가지 소스 방법이 있는것 같다. (파일명만 다름. 원리는 다 같을겁니다) SingleLiveEvent class SingleLiveEvent : MutableLiveData() { private val pending..

안드로이드 2024.02.14

안드로이드 layout xml @+id와 @id의 의미

안드로이드 layout xml @+id와 @id의 의미 xml에서 id참조 할때에 혹은 제약조건 걸때 @+id 와 @id의 의미 @id: 이미 존재하는 ID를 참조할 때 사용합니다. 만약 해당 ID가 이미 정의되어 있다면 새로운 ID를 생성하지 않고 기존의 ID를 참조합니다. @+id: 새로운 ID를 생성하고 리소스로 등록할 때 사용합니다. 이것은 기존에 없는 ID를 참조할 때 사용됩니다. 이미 존재하는 ID를 참조하더라도 새로 생성되고 리소스로 등록됩니다. 두 가지 방식을 혼용하여 사용해도 코드는 동작합니다. 선택은 여러분의 코딩 스타일과 팀 내 규칙에 따라 달라질 수 있습니다. 위의 코드에서 @+id/button1은 “button1”의 ID를 생성하고, @id/button2은 “button1"의 ID..

안드로이드 2024.02.07

Firebase FCM 기존 HTTP에서 HTTP v1로 마이그레이션

Firebase FCM 기존 HTTP에서 HTTP v1로 마이그레이션 타사 라이브러리 작업중 HTTP v1 API로 하라는 경고가 떠서 작성하게 되었습니다. FCM(Firebase 클라우드 메시징) 서비스는 2024년 6월 20일을 기점으로 레거시(XMPP, HTTP) 방식의 통신 API를 중단하고, 새로운 HTTP v1 API를 지원합니다. HTTP v1 API 장점 액세스 토큰을 통한 보안 향상: HTTP v1 API는 OAuth2 보안 모델에 따라 수명이 짧은 액세스 토큰을 사용합니다. 액세스 토큰이 공개되는 경우에도 악의적으로 사용될 수 있는 시간은 만료되기 전 1시간 정도뿐입니다. 갱신 토큰이 기존 API에서 사용하는 보안 키만큼 자주 전송되지 않으므로 캡처될 가능성이 매우 낮습니다. 보다 효율..

안드로이드 2024.01.29

테스트 코드 작성 junit assertEquals

안드로이드 테스트 코드 작성 작업중 StringUtil에 함수를 하나 만들었다. PR에 StringUtil함수 추가시에는 테스트 코드도 넣어주었으면 좋겠다고 하여 테스트 코드를 추가 하였습니다. 자바로 작성되어있어서.. 자바로 했다. 1. 테스트 클래스 파일을 만든다. 2. 함수를 실행하여 결과 확인 public class StringUtilTest { @Test public void replaceCurrentAppSchemeAndDomain() { assertEquals(StringUtil.함수(), "결과값"); } } 함수옆에 보면 실행하는 표시가 있다! 단정 메소드(assert method) JUnit에서 가장 많이 이용되는 단정(assert) 메소드입니다. 단정 메서드로 테스트 케이스의 수행 결..

안드로이드 2023.10.13

binding시 release 모드에서 에러가 발생할 때

릴리즈모드 바인딩 에러와 관련하여 몇 가지 테스트를 통해서 내용 정리를 했습니다. 1. Release 모드에서 VIewBinding class를 찾지 못해서 에러가 발생 -> 왜 찾지 못할까? ... 최적화(minifyEnabled)옵션이 true이면 binding 파일이 사라진다. 2. 최적화에서 binding 파일이 사라지지 않으려면 어떻게 해야 할까? -> layout 태그를 명시적으로 추가하거나, binding 파일을 사용하는 화면에서 binding에 실제 접근을 하면 된다. 결론 : layout 태그도 없고, Fragment 소스상에서 binding에 접근도 하지 않아 최적화 과정에서 참조 없는 클래스로 판단, 자동으로 삭제되어 문제가 발생. 앞으로, layout 태그를 명시적으로 추가하자!!!..

[Android] 첨부파일시 여러 파일형식 제어

첨부파일 작업중에 여러형식의 파일을 제어 해야한다. 바쁘신분들은 바로 이거 참조 구글 mime type Link Intent에 type을 */* 주고 EXTRA_MIME_TYPES에 적용할 MimeType들을 String배열로 넣어주면 된다. type = "*/*" val mimeTypes = arrayOf("각 MimeType", "각 MimeType") putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes) MIME TYPE을 인터넷으로 검색 했지만 잘 나오지 않는 파일형식들도 있었다! 그래서 파일 하나하나 로그를 찍어가면서 살펴 보았습니다. - Mime Type 가져오기 fun getMimeType(uri: Uri): String? { var mimeType: String?..

안드로이드 2023.08.10

Wiki에서 kotlin-playground 사용하기

Wiki에서 kotlin-playground 를 이용해 소스를 넣고 접기/펼치기를 사용 하려고 한다. 다른 매크로 선택하여 HTML을 입력 코드에 추가하면 접기/펼치기 가능 접기/펼치기 👈 아래에 kotlin-playground 소스를 넣으면 소스처럼 보인다! @Composable fun ShortColoredTextDemo( text: String = "", color: Color = Color.Black ) = Text( text = text, style = TextStyle(color = color) )