iOS开发-runtime获取设备电池电量

来源:互联网 发布:算法之美 中文版 pdf 编辑:程序博客网 时间:2024/04/30 12:45

通过runtime 获取StatusBar上电池电量控件类私有变量的值,此方法可精准获取iOS6以上电池电量

- (int)getCurrentBatteryLevel{    UIApplication * app = [UIApplication sharedApplication];    if (app.applicationState == UIApplicationStateActive || app.applicationState == UIApplicationStateInactive) {        Ivar ivar = class_getInstanceVariable([app class], "_statusBar");        id status = object_getIvar(app, 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);                        //这种方式也可以                        /*ptrdiff_t offset = ivar_getOffset(ivar);                         unsigned char *stuffBytes = (unsigned char *)(__bridge void *)bview;                         batteryLevel = * ((int *)(stuffBytes + offset));*/                        NSLog(@"电池电量为:%d",batteryLevel);                        if (batteryLevel > 0 && batteryLevel <= 100) {                            return batteryLevel;                        }else{                            return 0;                        }                    }                }            }        }    }    return 0;}


0 0