2013-03-21 2 views
0

Я создаю приложение для киоска Android, которое будет работать почти 24 часа в сутки 7 дней в неделю для небольшой клиентской работы, воспроизведения видео. Однако я обнаружил, что в некоторых случаях мощность может исчезнуть, что означает, что планшету нужно будет прекратить запуск приложения (или, по крайней мере, удалить постоянный экран), когда питание отключится и снова настройте все настройки, когда питание возвращается, поэтому оно не полностью уничтожает устройство. Раньше я работал над Android, но ничего подобного. Учитывая, что у меня только одно действие, и действие будет выполняться, когда я получаю полученное состояние, пришел к моему вызову onReceive в моем широковещательном приемнике (который я зарегистрировал в моем файле манифеста), что является лучшей практикой/самым идиоматическим способом для меня сообщить, что изменилось состояние на мою активность?Информация о моей основной деятельности Изменение состояния питания из BroadcastReceiver

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

+0

Почему вы не регистрируете мощность в своей деятельности? –

ответ

0

Простейшим способом было бы создать шаблон Observer/Observable, где ваш BroadcastReceiver реализует команду Observable и уведомляет всех заинтересованных лиц об изменениях. Действия (или другие классы), заинтересованные в изменении мощности, могут регистрироваться как Observer и получать вызовы через их функцию update(), когда что-то происходит.

Только не забудьте отменить регистрацию от Observer в onPause(), чтобы ваши мертвые действия не вызывались.

0

@ Хоан Нгуен - это право. Ваша активность может регистрироваться для событий батареи. Вот пример:

public class Test extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     final TextView text = new TextView(this); 
     setContentView(text); 
     registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1); 
       boolean charging = status == BatteryManager.BATTERY_STATUS_CHARGING || status == BatteryManager.BATTERY_STATUS_FULL; 
       text.setText(charging ? "Charging" : "On battery"); 
      } 
     }, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
    } 
} 

@lenik, вероятно, также верно, что вы должны зарегистрироваться/незарегистрированный в onResume()/OnPause(), а не в OnCreate(), но выше, должны вам начать.

Смежные вопросы