3

这是我的内部应用程序所需要的。我想在 ios 设备上切换 wifi。任何框架都可用。我尝试了以下代码,但它没有提供任何帮助。这不会改变我的 wifi 设置。

{       
    Class BluetoothManager = objc_getClass("BluetoothManager");
    id btCont = [BluetoothManager sharedInstance];
    [self performSelector:@selector(toggle:) withObject:btCont afterDelay:0.1f] ;
}
- (void)toggle:(id)btCont
{
    BOOL currentState = [btCont enabled] ;
    [btCont setEnabled:!currentState] ;
    [btCont setPowered:!currentState] ;
    exit( EXIT_SUCCESS ) ;
}
4

2 回答 2

4

从应用程序

notify_post("com.yourcompany.yourapp.yournotification");

来自 Dylib

#import <objc/runtime.h>
#import <SpringBoard/SBWiFiManager.h>

HOOK(SpringBoard, applicationDidFinishLaunching$, void, id app) {
    //Listen for events via DARWIN NOTIFICATION CENTER
    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL,
     &NotificationReceivedCallback, CFSTR("com.yourcompany.yourapp.yournotification"), NULL, 
      CFNotificationSuspensionBehaviorCoalesce);
}

//THIS IS WHERE THE MAGIC HAPPENS
static void NotificationReceivedCallback(CFNotificationCenterRef center, 
                                            void *observer, CFStringRef name, 
                                            const void *object, CFDictionaryRef 
                                            userInfo) 
{ 
    [[objc_getClass("SBWiFiManager") sharedInstance] setWiFiEnabled:NO];
}

笔记:

如果您在使用 Hook 方法时遇到任何错误,您可以参考此链接,它演示了如何挂钩 SpringBoard 中的 init 方法以在启动手机时显示警报消息。

警告:

由于使用了私有 api,因此您不能将其用于 appstore 应用程序。

参考

归因

希望这可以帮助。

于 2014-03-23T11:43:18.647 回答
3

你将无法做到。iOS 限制了第三方应用程序可以与底层硬件交互的数量。使用公共 SDK 编写的所有应用程序都经过沙盒处理。

正如 7KV7 在这里的回答中所说:

他们只能访问 Apple 认为可以在该沙箱中使用的属性和数据。恐怕 Wi-Fi 不在列表中。

于 2013-04-08T19:52:43.437 回答