设为首页 收藏本站
查看: 1228|回复: 0

[经验分享] [转]iOS设备中WiFi、蓝牙和飞行模式的开启与关闭

[复制链接]
累计签到:2 天
连续签到:1 天
发表于 2015-10-1 08:28:32 | 显示全部楼层 |阅读模式
  转自:http://www.cnblogs.com/OtionSky/archive/2011/11/08/iOS_WiFi_Controller.html
  今天写了一段有关在iPhone程序中开关WiFi型号的代码,经测试运行良好。
  我想不用我多说大家都应该知道以上的功能只能在越狱的设备中实现!
  好了,闲话稍少叙,进入正题:
  1.首先要在SpringBoard启动之后,我们要执行hook动作:
  NSString *identifier = [[NSBundle mainBundle] bundleIdentifier];
      if ([identifier isEqualToString:@"com.apple.springboard"]) {
          Class $SpringBoard = (objc_getClass("SpringBoard"));
          _SpringBoard$applicationDidFinishLaunching$ = MSHookMessage($SpringBoard, @selector(applicationDidFinishLaunching:), &$SpringBoard$applicationDidFinishLaunching$);
      }
  2. 然后实现我们的HOOK函数,这里我们仅仅是注册了两个消息:
  CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL,
                                    &NotificationReceivedCallback, CFSTR("turnOffWiFi"), NULL,
                                    CFNotificationSuspensionBehaviorCoalesce);
    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL,
                                    &NotificationReceivedCallback, CFSTR("turnOnWiFi"), NULL,
                                    CFNotificationSuspensionBehaviorCoalesce);
  3. 最后我们要响应这两个信号,也就是实现我们在第二步中指明的那个回调方法(NotificationReceivedCallback)
  static void NotificationReceivedCallback(CFNotificationCenterRef center,
                                         void *observer, CFStringRef name,
                                         const void *object, CFDictionaryRef
                                         userInfo)
{
    BOOL offOrOn = YES;
    if ([(NSString *)name isEqualToString:@"turnOffWiFi"]) {
        offOrOn = NO;
    } else if ([(NSString *)name isEqualToString:@"turnOnWiFi"]) {
        offOrOn = YES;
    }
    [[objc_getClass("SBWiFiManager") sharedInstance] setWiFiEnabled:offOrOn];
}
也就是这一步正真的对WiFi信号进行开关操作。好了我们的后台程序(dynamicLibrary)已经编写完成了。
  然后在我们的前台程序中我们找个事件来发送我们在后台注册的那两个消息,例如一个Button和一个BOOL值来完成这功能:
  BOOL turnOff = YES;
    if (turnOn) {
                CFNotificationCenterPostNotificationWithOptions(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("turnOffWiFi"), NULL, NULL, 0);
    } else {
                CFNotificationCenterPostNotificationWithOptions(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("turnOffWiFi"), NULL, NULL, 0);
    }
  测试设备:iPhone 3GS
  系统:iOS 4.3.3
  设备状态:已越狱
  测试结果:Perfect!
  
  注1:使用相同的方法我们可以启动和关闭蓝牙:
  首先,我们要从BluetoothManager.framework这个私有库中dump出BluetoothManager这个类;
  然后,我们就可以调用这个类的setPowered:方法启动和关闭蓝牙了(参数:YES为启动、NO为关闭)。
  经过我的测试是可以正常使用的。
  注2:我们同样可以对飞行模式作开启和关闭操作:
  首先:我们从SpringBoard中可以dump出SBTelephonyManager和SBStatusBarDataManager这两个 类,前者主要负责功能的开关,后者则是负责UI显示的。使用SBTelephonyManager的isInAirplaneMode方法可以得到当前的 飞行模式状态,setIsInAirplaneMode:这个方法来设置飞行模式。使用SBStatusBarDataManager的 airplaneModeChanged和_updateSignalStrengthItem来刷新UI显示状态。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-121127-1-1.html 上篇帖子: 为Ubuntu笔记本电脑设置WiFi热点共享上网 下篇帖子: 关于获取android的wifi-ip地址
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表