美文网首页
runtime精确获取电池电量

runtime精确获取电池电量

作者: 萝BAIBAI | 来源:发表于2016-01-07 14:54 被阅读65次
    - (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;
    }
    

    相关文章

      网友评论

          本文标题:runtime精确获取电池电量

          本文链接:https://www.haomeiwen.com/subject/tdefkttx.html