Иногда в пользовательском классе требуется получить доступ к контексту приложения.
Можно использовать метод внедрения зависимостей, но именно для этой задачи мне нравится подход с использованием статического хранилища.
Идея заключается в том, чтобы расширить класс android.app.Application статическим полем context, куда мы будем сохранять ссылку на Application при создании экземпляра класса.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  | 
						package com.myApp.utils import android.app.Application import android.content.Context class App : Application() {     override fun onCreate() {         super.onCreate()         context = this     }     companion object {         var context: Context? = null             private set     } }  | 
					
Чтобы эта конструкция заработала, необходимо указать явно имя нового класса в манифесте (AndroidManifest.xml).
В секцию application добавим свойство android:name
| 
					 1 2 3 4 5 6 7 8 9  | 
						<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     package="com.myapp.packagename">     <application         android:name="com.myApp.utils.App"         android:allowBackup="true" ...  | 
					
С этого момента вы можете получить контекст приложения в любом месте/классе вашего приложения. Например, чтобы вывести сообщение через Toast :
| 
					 1 2 3 4  | 
						val ctx = App.context ctx?.apply {   Toast.makeText(this, this.getString(R.string.my_message), Toast.LENGTH_LONG).show() }  |