Ответ 1
При изменении настроек мобильной передачи данных не происходит никаких событий. Об единственном способе сделать это (кроме прослушивания событий CONNECTIVITY_CHANGE
, как вы описали), было бы периодическое определение состояния настроек, связанных с мобильными данными. Если вы сделаете это слишком часто, вы просто разрядите батарею.
Если вы создаете свой собственный ПЗУ, вы можете добавить код в приложение "Настройки", которое будет транслировать событие, когда мобильные данные будут включены/отключены.
EDIT Добавлен метод получения уведомлений при изменении настроек
На самом деле, я нашел способ сделать это. Вы можете получать уведомление при изменении настроек мобильных данных. К сожалению, единственный способ сделать это - зарегистрироваться для уведомлений при каждом изменении любой настройки. Однако этого не происходит, что часто и, по крайней мере, вам не приходится так часто опросать и сбрасывать аккумулятор. Что вы хотите сделать, так это зарегистрировать ContentObserver
в настройках Secure
, например:
contentObserver = new SettingsObserver();
getApplicationContext().getContentResolver().registerContentObserver(
Settings.Secure.CONTENT_URI, true, contentObserver);
Вы должны реализовать SettingsObserver
следующим образом:
public class SettingsObserver extends ContentObserver {
public SettingsObserver() {
super(new Handler());
}
@Override
public void onChange(boolean selfChange) {
// Here you want to check the state of mobileDataEnabled using reflection to
// see if it has changed - see /questions/40395/how-to-tell-if-mobile-network-data-is-enabled-or-disabled-even-when-connected-by-wifi/292442#292442
}
}
Подробнее о том, как определить текущее состояние настройки мобильных данных, см. fooobar.com/questions/40395/....