Android - Регистрация получателя с помощью статического вспомогательного метода (не удается получить контекст)? - PullRequest
1 голос
/ 06 марта 2019

Теперь, когда в Манифесте невозможно установить фильтр намерений PROVIDERS_CHANGED, я делаю это динамически.
Однако мне нужно зарегистрировать / отменить регистрацию динамически закодированного приемника в нескольких местах.
В связи с этим я создаю «вспомогательный» класс, который содержит статический метод с кодом Receiver.

МОЙ ВОПРОС: Я не могу понять, как получить контекст для регистрации / отмены регистрации получателя.

Вот мой текущий код:

public class GpsReceiverHelper {

public static void gpsReceiverCode() {

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("android.location.PROVIDERS_CHANGED");

    final BroadcastReceiver gpsReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {

            if (intent.getAction() != null &&
                    intent.getAction().matches("android.location.PROVIDERS_CHANGED")) {

                //  RECEIVER CODE HERE

            }
        }
    };
    this.registerReceiver(gpsReceiver, intentFilter);
    //  THIS IS WHERE I CAN'T GET A CONTEXT (USING "this" OR OTHERWISE)

}
}

МОИ ВОПРОСЫ:
(A) - Как я могу получить context здесь?
(B) - Является ли создание вспомогательного класса методом public static правильным способом сделать это?

1 Ответ

1 голос
/ 06 марта 2019

Как я могу получить контекст здесь?

Передать его как параметр (public static void gpsReceiverCode(Context context)).

Мне нужно зарегистрировать / отменить регистрацию динамически закодированного приемника в нескольких местах

Когда ваш получатель был в манифесте, он был "зарегистрирован" в одном месте. Следовательно, когда вы делаете это динамически, вы можете зарегистрировать его в одном месте (например, пользовательский Application подкласс).

Является ли создание вспомогательного класса с открытым статическим методом правильным способом сделать это?

Вероятно, нет, поскольку вам, вероятно, не нужно использовать этот код в 2+ местах.

...