如何从Context获取应用程序

38

我能否从Context中获取应用程序?我注意到Activity和Service有getApplication()方法,但Context没有。

背景:

我正在使用/扩展GCMBaseIntentService和

protected abstract void  onMessage (Context context, Intent intent) 

给我一个上下文参数。我想获得Application对象,以便将其向下转换为MyApplication并检索一些变量

谢谢


1
(YourApplicationClass)context.getApplicationContext() - Leonidos
3个回答

33

Context#getApplicationContext 会返回您的 Application 实例。


8
为什么?文档上说它会返回“当前进程单一全局应用程序对象的上下文”。返回类型是Context,而不是ApplicationContextApplication的祖先类,但你怎么知道getApplicationContext()会返回Application实例?我怀疑你是对的,但我想看到一个同意的权威来源。 - LarsH
11
例如,参见 https://dev59.com/-2445IYBdhLWcg3wIG19 ,其中指出 getApplicationContext() 并不总是返回与您的 Application 实例相同的对象。 - LarsH
11
这是一个正确的回答吗?为什么它能被接受并得到这么多赞? - Tanasis
7
我找不到证实我的答案的声明,但至少Google的开发人员在AndroidX中使用了这种方法。点此链接 - Egor Neliuba

11
val application : Application = context.applicationContext as Application

0

对于那些在寻找 Kotlin 答案的人:

        @BindingAdapter("app:setSelectArea")
        @JvmStatic
        fun setSelectArea(view: ImageView, mContext: ContextX){
            view.setOnClickListener {
                val application = view.context.applicationContext as Application
                val viewModel:KnowledgeViewModel by lazy { KnowledgeViewModel(application) }
                val mKnowledge = Knowledge(
                    "",
                    "abcdefg test",
                    ""
                )
                viewModel.firebaseInsertKnowledge(mKnowledge)
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接