Имитация низкого заряда батареи для iPhone

Я работаю над мобильной игрой, которая, по-видимому, вылетает при отображении предупреждения о низком заряде батареи. Он отлично работает при нехватке памяти, входящих звонках и других сообщениях.

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

Кто-нибудь знает, как реалистично создать эту ошибку? Надеюсь, что-то, что не слишком напрягает аккумулятор моего iPhone.


person Nils Munch    schedule 14.06.2012    source источник
comment
хороший вопрос. У меня была похожая проблема   -  person Paul de Lange    schedule 14.06.2012
comment
Когда происходит сбой? Когда вы получаете предупреждение о низком заряде батареи или что-то еще?   -  person Bo.    schedule 14.06.2012
comment
Как только появляется синее предупреждение, приложение вылетает. Предупреждение о разряде батареи остается.   -  person Nils Munch    schedule 14.06.2012
comment
В вашем приложении происходит сбой при отображении других системных предупреждений? Например, предупреждения о сотовых данных и т. Д., Или это буквально просто предупреждение о низком энергопотреблении?   -  person lyptt    schedule 19.06.2012
comment
Ничего подобного нет, он не вылетает при входящих смс, звонках или предупреждениях о данных сотовой связи ... к сожалению. :П   -  person Nils Munch    schedule 19.06.2012
comment
Как ты это починил ? у моего приложения такая же проблема. Я больше ищу решение, чем моделирование. любой фрагмент кода поможет. Спасибо заранее :-)   -  person mask    schedule 19.12.2012


Ответы (4)


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

Чтобы ответить на то, что сказали другие:

  1. Невозможно имитировать уведомления о низком заряде батареи. Проект, который @Bo. при условии, не делает ничего, кроме случайного расписания UILocalNotifications. Это не сильно отличается от простого отображения UIAlertView в вашем приложении.
  2. Вы можете попробовать то, что сказал @Andrew R., и использовать частные методы, найденные в UIDevice заголовок. Но вряд ли вы точно имитируете эффекты реальной среды с низким уровнем заряда батареи.

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

Удачи.

person Michael Frederick    schedule 19.06.2012

Вы пробовали имитировать уведомления о низком заряде батареи? Похоже, есть проект, который это делает: https://github.com/MegaEduX/LowBattery

person Bo.    schedule 14.06.2012
comment
К сожалению, это не дает мне реалистичного результата ... Кажется, что это просто имитирует предупреждение и не приводит к сбою моего приложения, и это все еще происходит на реальном iphone, у которого мало энергии. - person Nils Munch; 14.06.2012

В iOS есть способ имитировать «Низкий заряд батареи»

Мониторинг батареи включается установкой YES для свойства синглтона UIDevice:

UIDevice *device = [UIDevice currentDevice];
device.batteryMonitoringEnabled = YES;

iOS предоставляет два типа событий мониторинга батареи: один при изменении состояния (например, зарядка, отключение от сети, полная зарядка) и второй, который обновляется при изменении уровня заряда аккумулятора. Как и в случае с мониторингом близости, вы регистрируете обратные вызовы для получения уведомлений:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryChanged:) name:@"UIDeviceBatteryLevelDidChangeNotification" object:device];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryChanged:) name:@"UIDeviceBatteryStateDidChangeNotification" object:device];
person iBhavik    schedule 03.03.2015
comment
Это не имитирует низкий уровень заряда батареи, это позволяет приложению проверить уровень заряда батареи. - person Moebius; 25.06.2019

Предполагая, что это только для целей тестирования, вы можете попробовать следующие частные UIDevice методы:

-(void)_setBatteryState:(int)state;
-(void)_setBatteryLevel:(float)level;

Вам придется поэкспериментировать, чтобы увидеть, какие параметры они ожидают, и влияют ли они на них вообще.

person Andrew R.    schedule 19.06.2012
comment
в то время как функция _setBatteryLevel доступна через категорию, и в этой категории вызов [self performSelector:@selector(_setBatteryLevel:) withObject:[NSNumber numberWithFloat:0.01]] приведет к тому, что значение, возвращаемое [[UIDevice currentDevice] batteryLevel], вернет значение, которое вы отправили, это не вызовет предупреждения о нехватке памяти. - person john.k.doe; 24.06.2012
comment
@ john.k.doe вы пробовали установить его на 25, 20? Я слышал, что предупреждение о низком заряде батареи срабатывает с интервалом 5%, а предупреждение отображается только при достижении предельного уровня - person onmyway133; 07.05.2013