728x90
개발하면서 Service가 아닌 Repository와 같이 사용자가 임의로 만든 클래스에서 Context가 필요한 경우가 있다. 일반적으로 패러미터로 넘기거나 클래스 생성자로 넘기는 방법이 있습니다. (생성자로 넘기게 되면 의존성이 강해지므로 권장하는 방법은 아니다. )
Context를 매번 넘길 필요 없이 어디에서든 ApplicationContext를 받는 방법이 있습니다.
만약 Context가 무엇인지 이해하지 못하고 있다면 아래글을 보는걸 추천드립니다.
Context?
개발하면서 항상 헷깔렸던 Context에 대해 공식문서와 구글 검색을 통해 정리를 해봤다. 정의 문맥 또는 맥락은 언어학, 사회학에서 핵심이 되는 사건 주변의 실체 정의만 봤을 때 안드로이드에서
huzit.tistory.com
방법
메인 액티비티와 같은 층의 디렉토리에 클래스를 하나 만듭니다.
Application() 상속 이후 자기자신의 인스턴스를 어디서든 참조할 수 있도록 컴패니언 오브젝트에 함수 하나 만들어서 리턴 시켜주면 됩니다.
class MyApplication : Application() {
init {
instance = this
}
companion object {
lateinit var instance: KMApplication
fun applicationContext(): Context {
return instance.applicationContext
}
}
}
이후 Manifest에서 방금 만든 어플리케이션 클래스를 추가해줘야합니다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:name=".MyApplication"
...>
</application>
</manifest>
KMApplication.applicationContext()
이제 저 한 줄 이면 어디서든 ApplicationContext를 가져올 수 있습니다.
728x90
'안드로이드 > 응용' 카테고리의 다른 글
다국어 지원 (Wear OS) (0) | 2023.11.17 |
---|---|
FusedLocationService로 위치 조회 (0) | 2023.09.25 |
SingleTon Holder로 편하게 SingleTon 쓰기 (0) | 2023.09.22 |