iOS设备的电池百分比的准确性一直是一个很坑爹的问题!因为通过UIDevice类中的batteryLevel获取到的电池百分率的精度是百分之五,但是iOS设备本身提供的电池百分率(“设置”-->“通用”-->“用量”-->“电池百分比”)的精度确实百分之一(这个绝对坑爹,让做与电池有关开发者情何以堪啊!!),由于本人一直在做越狱开发,所以获取精确的百分比到不是什么问题,但是要做App Store就难了,由于没有精确的接口,感觉这是真是蜀道难难于上青天!!!所以有许多厂商的有关这类产品一直存在这个痛点!

不过近期我突然发现有些厂商似乎找到了解决办法,因为我看到他们的电池百分率居然和系统提供的百分率是相同的(震惊了,丫的难道使用了什么神器,心中由衷的对他们产生了敬意)。等等太坑爹了吧,当我把系统的百分率关闭之后他们的精度又恢复到了百分之五,难道他们是截取了状态栏上的百分比值吗???这个可就牛X了!!!

于是我对获取电池电量百分之一的方法进行了一番研究,大致得出如下结论:

1. App Store 产品可以获得精确的电池百分比(与系统相同的);

2. 在关闭系统电池百分比之后,部分厂商产品的电池百分比的精度恢复到了百分之五这个变化是有意为之,而非技术难题;

3. 如果第二条结论是错误的,那只能说明这些厂商太......

 

好了,以上皆为扯淡,作为一名程序员,我还是把我的研究成功公布给大家,希望可以帮助到那些想要在App Store产品中用到精确的电池百分率的同行们:

NSNumber *batteryPercentage = nil;
  NSArray *statusBarSubviews = [[[[[UIApplication sharedApplication] valueForKey:@"_statusBar"] subviews] lastObject] subviews];
  for (id subview in statusBarSubviews) {
    if ([subview isKindOfClass:NSClassFromString(@"UIStatusBarBatteryItemView")]) {
      batteryPercentage = [subview valueForKey:@"_capacity"];
      break;
    }
  }

这里的batteryPercentage就一个0~100的整数构成的NSNumber类型的变量,这个正是我们想要的,他并不依赖于系统是否开启了百分比的显示!!!