Android: создание постоянного прослушивателя событий - PullRequest
0 голосов
/ 02 октября 2011

Я пытаюсь выяснить, как реализовать прослушиватель событий (не уверен, что это правильный термин). Я хочу, чтобы служба после запуска моего приложения прослушивала состояние питания телефонов. Я не уверен, как Android справится с этой ситуацией, поэтому не знаю, что искать. Я работал с этим кодом, который использует широковещательный приемник:

 BroadcastReceiver receiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            unregisterReceiver(this);
            int plugged = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
            if (plugged == BatteryManager.BATTERY_PLUGGED_AC) {
                // on AC power
                 Toast.makeText(getApplicationContext(), "AC POWER", Toast.LENGTH_LONG).show();
            } else if (plugged == BatteryManager.BATTERY_PLUGGED_USB) {
                // on USB power
             Toast.makeText(getApplicationContext(), "USB POWER", Toast.LENGTH_LONG).show();
                 startActivity(alarmClockIntent);
            } else if (plugged == 0) {
                Toast.makeText(getApplicationContext(), "On Battery", Toast.LENGTH_LONG).show();
            } else {
                // intent didnt include extra info
            }
        }
    };
    IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
    registerReceiver(receiver, filter);

Код работает нормально. Когда я открываю свое приложение, оно показывает, каково текущее состояние телефона.

Вот что я пытаюсь сделать:

  • Когда пользователь запускает приложение, оно фактически включает службу
  • Пользователь может использовать телефон, но как только он подключен, мой сервис поймает это и использует код выше

Как мне адаптировать этот код для достижения вышеуказанных целей?

1 Ответ

1 голос
/ 03 октября 2011

Вы можете оставить слушателя включенным для состояния батареи, убрав строку

unregisterReceiver(this);

Таким образом, приложение будет продолжать прослушивать изменение состояния питания в фоновом режиме, даже если приложение не работает на переднем плане. Обратите внимание, что в какой-то момент вы все равно можете отменить регистрацию получателя. Возможно, вы захотите разрешить пользователю контролировать это через настройки.

Еще одно примечание: ваш код содержит начальную активность в приемнике, приведенную ниже:


else if (plugged == BatteryManager.BATTERY_PLUGGED_USB) {
    // on USB power
    Toast.makeText(getApplicationContext(), "USB POWER", Toast.LENGTH_LONG).show();
    startActivity(alarmClockIntent);
} 

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...