我今天使用theos创建了我的第一个flipswitch。
开关编辑调整的.plist文件以将其打开
交换机工作并打开调整但为了使调整对应用程序生效,必须重新启动应用程序
因此我需要在每次打开和关闭时切换特定应用程序
顺便说一下,我是Objective-c的新手,非常感谢你的帮助,谢谢!
我的switch.x
#import "FSSwitchDataSource.h"
#import "FSSwitchPanel.h"
#import <notify.h>
static NSString * const PREF_PATH = @"/var/mobile/Library/Preferences/file.plist";
static NSString * const kSwitchKey = @"enabled";
@interface waplastseenSwitch : NSObject <FSSwitchDataSource>
@end
@implementation waplastseenSwitch
- (FSSwitchState)stateForSwitchIdentifier:(NSString *)switchIdentifier
{
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:PREF_PATH];
id existEnable = [dict objectForKey:kSwitchKey];
BOOL isenabled = existEnable ? [existEnable boolValue] : YES;
return isenabled ? FSSwitchStateOn : FSSwitchStateOff;
}
- (void)applyState:(FSSwitchState)newState forSwitchIdentifier:(NSString *)switchIdentifier
{
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:PREF_PATH];
NSMutableDictionary *mutableDict = dict ? [[dict mutableCopy] autorelease] : [NSMutableDictionary dictionary];
switch (newState) {
case FSSwitchStateIndeterminate:
return;
case FSSwitchStateOn:
[mutableDict setValue:@YES forKey:kSwitchKey];
break;
case FSSwitchStateOff:
[mutableDict setValue:@NO forKey:kSwitchKey];
break;
}
[mutableDict writeToFile:PREF_PATH atomically:YES];
notify_post("Flipswitch.settingschanged");
}
@end
答案 0 :(得分:1)
我使用
解决它 system("killall -9 AppName");
像这样
case FSSwitchStateOn:
[mutableDict setValue:@YES forKey:kSwitchKey];
system("killall -9 AppName");
break;
case FSSwitchStateOff:
[mutableDict setValue:@NO forKey:kSwitchKey];
system("killall -9 AppName");
break;
干杯!
答案 1 :(得分:0)
抱歉,我不能发表评论,所以我不得不在答案中提出这个问题。 你的钩子代码是什么?我只是问,因为你不应该重新启动应用程序以使你的调整工作。
确保钩子代码在每个阶段检查plist,而不是仅仅在app启动时检查。
因此,在每种方法中测试是否要运行代码。
如果您的调整依赖于启动时的某些内容,可能会将此值存储在内存中,因此如果您决定启用调整,则可以获得所需内容。