IOS程序中代码获取当前设备电量
方法一:
[UIDevice currentDevice].batteryMonitoringEnabled = YES;
double deviceLevel = [UIDevice currentDevice].batteryLevel;
方法二:
也可以自己写一个方法:
// 获取电量
- (double) batteryLevel
{
CFTypeRef blob = IOPSCopyPowerSourcesInfo();
CFArrayRef sources = IOPSCopyPowerSourcesList(blob);
CFDictionaryRef pSource = NULL;
const void *psValue;
int numOfSources = CFArrayGetCount(sources);
if (numOfSources == 0) {
NSLog(@"Error in CFArrayGetCount");
return -1.0f;
}
for (int i = 0 ; i < numOfSources ; i++)
{
pSource = IOPSGetPowerSourceDescription(blob, CFArrayGetValueAtIndex(sources, i));
if (!pSource) {
NSLog(@"Error in IOPSGetPowerSourceDescription");
return -1.0f;
}
psValue = (CFStringRef)CFDictionaryGetValue(pSource, CFSTR(kIOPSNameKey));
//int curCapacity = 0;
// int maxCapacity = 0;
float curCapacity = 0;
float maxCapacity = 0;
double percent;
psValue = CFDictionaryGetValue(pSource, CFSTR(kIOPSCurrentCapacityKey));
CFNumberGetValue((CFNumberRef)psValue, kCFNumberFloat32Type, &curCapacity);
psValue = CFDictionaryGetValue(pSource, CFSTR(kIOPSMaxCapacityKey));
CFNumberGetValue((CFNumberRef)psValue, kCFNumberFloat32Type, &maxCapacity);
// NSLog(@"curCapacity:%f-maxCapacity:%f",curCapacity,maxCapacity);
percent = ((double)(curCapacity)/(double)maxCapacity * 100.0f);
[_circleChart setProgress:percent/100 animated:YES];
[_titleLabel setHidden:NO];
_titleLabel.frame=CGRectMake(0, 0, r, r);
_titleLabel.text=[NSString stringWithFormat:@"%.0f%%",percent];
[_titleLabel setCenter:CGPointMake(r/2+_circleChart.frame.origin.x,r+_circleChart.frame.origin.y-80)];
[_gradeLabel setHidden:NO];
_gradeLabel.frame=CGRectMake(0, 0, r, r);
_gradeLabel.text=@"当前电量";
[_gradeLabel setCenter:CGPointMake(r/2+_circleChart.frame.origin.x,r-40+_circleChart.frame.origin.y)];
return percent;
}
return -1.0f;
}