Access to application class in Broadcast Receiver

眉间皱痕 提交于 2019-11-29 18:50:14

问题


I want to check internet connection in Broadcast Receiver; And set result (A boolean flag) to a global variable, to use it on whole application, in if conditions; That if internet is disconnected, set a status imageview in main activity, to red image, and if connected, set it to green.

I followed this topic. But there is no getApplication() in Broadcast Receiver; And iI should use getApplicationContext() instead.

On another side, this topic:

when writing code in a broadcast receiver, which is not a context but is given a context in its onReceive method, you can only call getApplicationContext(). Which also means that you are not guaranteed to have access to your application in a BroadcastReceiver.

  1. What are the concerns?

  2. How can I access to my application class in broadcast Receiver?

  3. Is there better solution to check internet connection, set global variable and change my status imageview?


回答1:


You can access your Application class in BroadCastReceiver by using its context,

 @Override
 public void onReceive(final Context context, Intent intent) {
   MyApplication mApplication = ((MyApplication)context.getApplicationContext());
 }



回答2:


Maybe it will help somebody. If using own application class:

public class App extends Application {

    private static App sInstance;

    public static App get() {
        return sInstance;
    }

    @Override
    public void onCreate() {
        sInstance = this;
        super.onCreate();
    }

}

Then you can use App.get() in your broadcast receiver. According to onCreate() docs it will be called before receiver calls.

Called when the application is starting, before any activity, service, or receiver objects (excluding content providers) have been created.



来源:https://stackoverflow.com/questions/24825684/access-to-application-class-in-broadcast-receiver

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!