版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.08.06 |
前言
很多时候我们需要监听和获取电池的电量,ios提供了很多查看的方式,下面我们就一起来看一下。感兴趣的还可以看我的上一篇。
1. 获取设备的电池状态(一)—— UIDevice API获取
功能要求
获取设备的电池状态和电量,这里采用的是运行时的方法。
功能实现
下面看一下代码。
#import "JJBatteryRuntimeVC.h"
#import <objc/runtime.h>
@interface JJBatteryRuntimeVC ()
@end
@implementation JJBatteryRuntimeVC
#pragma mark - Override Base Function
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor lightGrayColor];
[self getCurrentBattery];
}
#pragma mark - Object Private Function
- (void)getCurrentBattery
{
UIApplication *application = [UIApplication sharedApplication];
if (application.applicationState == UIApplicationStateActive ||
application.applicationState == UIApplicationStateInactive) {
Ivar ivar = class_getInstanceVariable([application class], "_statusBar");
id status = object_getIvar(application, ivar);
for (id aview in [status subviews]) {
int batteryLevel = 0;
for (id bview in [aview subviews]) {
if ([NSStringFromClass([bview class]) caseInsensitiveCompare:@"UIStatusBarBatteryItemView"] == NSOrderedSame
&& [[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0) {
Ivar ivar = class_getInstanceVariable([bview class], "_capacity");
if (ivar) {
batteryLevel = ((int(*)(id, Ivar))object_getIvar)(bview, ivar);
NSLog(@"batteryLevel = %d", batteryLevel);
}
}
}
}
}
}
@end
下面看一下结果输出。
2017-08-07 00:00:08.011210+0800 JJOC[8011:3194170] batteryLevel = 75
功能效果
下面我们看一下手机电池状态效果图。
可见,这个方法获取的电池电量不是很准确,得到的记过是75%
,显示的结果是73%
。
后记
未完,待续~~~