Android: Как проверить, что приложение было доведено до фона, чтобы избежать не нужных проверок Broadcastreceiver

StackOverflow https://stackoverflow.com//questions/22036634

Вопрос

Вопрос просто просто:

Объяснение:

То, что я делаю, это иметь широкоструктуре, который называется каждый раз, когда состояние GPS изменяется (включает или отключает) и уведомляет пользователя, если GPS как отключен, приглашая его повторно повторно (запуск относительного намерения) ,

Я включаю в себя (и в конечном итоге отключить) его в корневой активности моего приложения, таким образом он будет призван для каждой дочерней деятельности.

Моя проблема выходит, когда пользователь нажимает кнопку домой (например) или открыть другое приложение и отключает GPS. Уведомление по-прежнему кажется, приносят мое приложение на фронт.

код

BREATCASTRECEIVER

public class GPSStatusReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String provider = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

        if (!provider.contains(LocationManager.GPS_PROVIDER)) {
            Intent gpsIntent = new Intent(context, GPSDialogActivity.class);
            gpsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            gpsIntent.putExtra(GPSDialogActivity.GPS_DIALOG_TITLE, "Attivazione GPS");
            gpsIntent.putExtra(GPSDialogActivity.GPS_DIALOG_MESSAGE, "E' necessario abilitare il GPS. Cliccare su 'Usa satelliti GPS'.");
            context.startActivity(gpsIntent);
        }
    }
}
.

включить / отключить проверку приемника на oncreate и ondestroy из корневой активности

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    *
    *
    Stuff
    *
    *

    ComponentName component=new ComponentName(this, GPSStatusReceiver.class);
    getPackageManager()
        .setComponentEnabledSetting(component,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
}

@Override
protected void onDestroy() {

    *
    *
    Stuff
    *
    *
    *

    ComponentName component=new ComponentName(this, GPSStatusReceiver.class);
    getPackageManager()
        .setComponentEnabledSetting(component,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
    super.onDestroy();
}
.

Первичные потребности

То, что мне нужно, это отключить вызов BroadCastreceiver, когда приложение отправляется на фоновый режим и включить его, когда приложение возвращается к фронту

Что было бы лучшим

Следуя приведенным выше потребностям:

Если пользователь отключает GPS, когда приложение находится в фоновом режиме (так, как он не должен иметь никакого уведомления), когда он снова принесет приложение вперед к фронту, я перехватываю его и выполнил ручную проверку состояния GPS и в конечном итоге сообщите пользователю, чтобы включить GPS.

Это было полезно?

Решение

Это одна из причин, почему фрагменты полезны.Если у вас есть один генеракодицетагкод, управляющий несколькими фрагментами, генеракодицетагкод и генеракодицетагкод этой активности будут обращаться с регистрацией и незарегистрированным приемным ресивером без осложнения детей.

Забавитесь, что я рекомендую подклассую активность в «GPSReceiverActivity», обрабатывая регистрацию и незарегистрированную регистрацию приемника, и используя это в качестве базовой базовой массы всех других видов деятельности, которые вы хотите получить трансляцию.

Хорошо написанный вопрос, кстати.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top