2010-10-02 4 views
3

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

Я понимаю, что могу зарегистрировать onChange слушателей для индивидуальных изменений предпочтений, но я не хочу перезапускать Сервис как каждый изменений предпочтений. Я хотел бы сделать это, когда пользователь выполнит редактирование всех настроек. Не имея кнопки «Применить сейчас» в PreferenceActivity, я не вижу прямого способа сделать это.

Я пропустил что-то фундаментальное здесь?

Спасибо!

ответ

3

В Activity, запускающей PreferenceActivity использование startActivityForResult и onActivityResult отслеживать, когда пользователь закончил PreferenceActivity и перезапустить службу там.

например.

Где бы вы ни запуском PreferenceActivity:

Intent prefIntent = new Intent(this, MyPreferenceActivity.class); 
startActivityForResult(prefIntent, PREFS_UPDATED); 

позже в том же Activity:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (resultCode) { 
     case PREFS_UPDATED: 
      // restart service 
      break; 
     ... 
    } 
} 
+0

однако startActivityForResult не может быть вызван из службы, вам нужно будет открыть действие, которое затем откроет другое действие. – htafoya

1

Другой альтернативой является переопределить OnStart() в PreferenceActivity для записи "до" значения , и переопределить его onStop(), чтобы проверить любые дельта, чтобы они могли обрабатываться все сразу, например

@Override 
protected void onStart() { 
    super.onStart(); 
    // save current state into data member(s) for comparison later 
    mShouldNotify = getApp().getSettings().getBoolean(PrefsActivity.PREF_SHOW_NOTIFICATIONS, true);   
} 

@Override 
protected void onStop() { 
    super.onStop(); 

    if (mShouldNotify != getApp().getSettings().getBoolean(PrefsActivity.PREF_SHOW_NOTIFICATIONS, true)) { 
     // we changed notifcation status. Tell google. 
     getApp().updateGooglePushRegistration(); 
    } 
} 
+0

onStop работал хорошо для меня, чтобы применить изменения при выходе настроек – htafoya

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