模拟iPhone低电量的方法

38

我正在开发一款移动游戏,但当“低电量”警报被显示时,游戏会出现崩溃现象,而在低内存、来电和其他消息的情况下则能正常运行。

由于无法找到模拟此情况的终端或iPhone模拟器方式,因此测试和调试变得很麻烦。我必须将手机充电一段时间,启动应用程序,等待其耗尽电力,然后再重新开始。

是否有人知道以逼真的方式产生此错误的方法?希望不要对我的iPhone电池造成太大压力。


好问题。我曾经遇到过类似的问题。 - Paul de Lange
它什么时候会崩溃?当你收到“低电量警报”或其他什么提示时吗? - Bo.
当蓝色警报出现时,应用程序崩溃了。电池警告仍然显示着。 - Nils Munch
你的应用程序是否会在显示其他系统警报时崩溃?例如,蜂窝数据警告等,还是仅仅是低电量警报? - user1282993
没有这样的情况,它不会在收到短信、电话或蜂窝数据警告时崩溃...可惜。 :P - Nils Munch
你是怎么解决的?我的应用程序也有同样的问题。我更想要解决方案而不是模拟。任何代码片段都会有所帮助。提前感谢 :-) - mask
4个回答

15

很遗憾,没有好的方法来模拟低电量环境。您实际上最有可能需要将设备的电池充到略高于“低电量”状态,然后调试应用程序。

针对其他人所说的:

  1. 无法模拟低电量通知。@Bo.提供的项目仅安排随机UILocalNotifications。这与在应用程序中显示UIAlertView并没有太大区别。
  2. 您可以尝试@Andrew R.所说的使用UIDevice header中找到的私有方法。但是,很难完全模仿真实的低电量环境的效果。

虽然等待设备实际达到低电量状态很麻烦,但您可以向应用程序添加一些耗电代码来协助您。例如,使用GPS可能会更快地消耗电池。

祝好运。


1

很遗憾,这对我来说似乎并没有产生实际的输出...它只是似乎模仿了警告,并没有使我的应用程序崩溃,而且这仍然发生在一台低电量的“真正”的iPhone上。 - Nils Munch

-2

假设这只是为了测试目的,您可以尝试使用以下私有UIDevice方法:

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

你需要进行实验以确定它们期望的参数,或者它们是否有任何影响。


2
_setBatteryLevel 函数可以通过类别使用,并且在该类别中,调用 [self performSelector:@selector(_setBatteryLevel:) withObject:[NSNumber numberWithFloat:0.01]] 将导致 [[UIDevice currentDevice] batteryLevel] 返回您发送的值,但不会触发低内存警告。 - john.k.doe
@john.k.doe,你试过将它设置为25、20吗?我听说低电量警告是在5%的间隔触发的,并且只有在达到级别限制时才会显示警告。 - onmyway133

-3
在iOS中有一种模拟“低电量”的方法。
通过将UIDevice单例的一个属性设置为YES来启用电池监控:
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];

1
这并不模拟低电量,它允许应用程序检查电池电量水平。 - Moebius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接