如何从Context获取应用程序

Sna*_*ake 21 android google-cloud-messaging

有没有办法从Context获取应用程序.我注意到activity和service有getApplication()方法,但Context没有.

背景:

我正在使用/扩展GCMBaseIntentService和

protected abstract void  onMessage (Context context, Intent intent) 
Run Code Online (Sandbox Code Playgroud)

给我一个上下文作为参数.我想获取Application对象,以便我可以将它转发到MyApplication并检索一些变量

谢谢

Ego*_*uba 22

Context#getApplicationContext将返回您的Application实例.

  • 例如,请参阅/sf/ask/351298181/,其中说"getApplicationContext()`将不会**总是返回与`Application`实例相同的对象. (6认同)
  • 我找不到确认我答案的声明,但至少 Google 开发人员 [在 AndroidX 中使用此方法](https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-master -dev/lifecycle/lifecycle-process/src/main/java/androidx/lifecycle/ProcessLifecycleOwner.java?source=post_page------------------------ ---%2F&自动潜水=0%2F#162) (6认同)
  • 为何如此?文档说它将返回“当前进程的单个全局Application对象的**上下文**”。返回类型是“上下文”,而不是“应用程序”。Context是Application的祖先类,但是您怎么知道getApplicationContext()将返回Application实例呢?我怀疑您可能是对的,但我希望看到一个权威人士同意。 (4认同)
  • 这甚至是正确的答案吗?为什么这么多人接受和反对它? (4认同)

小智 11

val application : Application = context.applicationContext as Application
Run Code Online (Sandbox Code Playgroud)