需求:最大限度保护iPhone/iPad 手机电池
参考一款MacOs软件的方法
- AlDente 是一款可以限制 Macbook Air / Pro 系列设备最大充电百分比的工具,它能让你的电脑在插着电源的情况下,保持电池容量在 80% 以下,以延长电池寿命
方案一: 通过代码控制(待验证实现)
手机在连接充电线的情况下!
-
当电量大于某个值(比如 80%)的时候 通过系统私有函数让其停止充电。
-
当低于某个值(比如20%)的时候让其正常充电。
方案二: 网上搜索到的别人的方案(已成功验证)
-
https://ngabbs.com/read.php?&tid=28924769
我的iPad插了一个 磁吸usb口,平时磁吸充电。 iphone都是用无线充电。。
最近捣鼓捷径发现一个 能保护ipad电源低电量自动充电,冲到80%自动断电的功能,在不刻意的情况下舒适使用保护电池 -
大概思路
-
- 搞几个智能插座,接入homekit,他家里电器几乎都接入了homekit(大概意思就是都能通过网络请求远程控制插座的开关)
-
- 在捷径里面设置 电量低于30% 的时候 控制家庭里面的设备- 智能插座-打开
-
- 在捷径里面设置 点了高于80%的时候 控制家庭里面的设备-智能插座-关闭
我的问题
- 有没有类似的软件开源闭源皆可
- 有没有大概逆向系统的思路
在大佬指点之前打算自己先从打开优化电池充电的log入手分析试试。
-[PowerUISmartChargeClient enableSmartCharging:]
-[PowerUISmartChargeClient setState:error:]
-
今天还看到有人问 所以发下两位开源的大佬的链接吧
评论区 lich4 开源的核心函数
static io_service_t getIOPMPSServ() {
static io_service_t serv = 0;
if (serv == 0) {
serv = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOPMPowerSource"));
// IOPMPowerSource:AppleARMPMUPowerSource:AppleARMPMUCharger
// IOAccessoryTransport:IOAccessoryPowerSource:AppleARMPMUAccessoryPS
// AppleSmartBattery >=iPhone11才有, 且数据相同
}
return serv;
}
static int setChargeStatus(BOOL flag) {
io_service_t serv = getIOPMPSServ();
if (serv == 0) {
return -1;
}
NSMutableDictionary* props = [NSMutableDictionary new];
props[@"IsCharging"] = @(flag);
props[@"PredictiveChargingInhibit"] = @NO; // PredictiveChargingInhibit为IsCharging总开关
kern_return_t ret = IORegistryEntrySetCFProperties(serv, (__bridge CFTypeRef)props);
if (ret != 0) {
return -2;
}
NSLog(@"ret %d",ret);
return 0;
}