iOS设备中WiFi、蓝牙和飞行模式的开启与关闭
来源:互联网 发布:软件测试的发展前途 编辑:程序博客网 时间:2024/04/20 08:57
iOS设备中WiFi、蓝牙和飞行模式的开启与关闭
转自: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为关闭)。
带有.h文件的BluetoothManager.framework请到我的资源里下载
经过我的测试是可以正常使用的。
注2:我们同样可以对飞行模式作开启和关闭操作:
首先:我们从SpringBoard中可以dump出SBTelephonyManager和SBStatusBarDataManager这两个 类,前者主要负责功能的开关,后者则是负责UI显示的。使用SBTelephonyManager的isInAirplaneMode方法可以得到当前的 飞行模式状态,setIsInAirplaneMode:这个方法来设置飞行模式。使用SBStatusBarDataManager的 airplaneModeChanged和_updateSignalStrengthItem来刷新UI显示状态。
- iOS设备中WiFi、蓝牙和飞行模式的开启与关闭
- iOS设备中WiFi、蓝牙和飞行模式的开启与关闭
- iOS设备中WiFi、蓝牙和飞行模式的开启与关闭
- iOS设备中WiFi、蓝牙和飞行模式的开启与关闭
- iOS设备中WiFi、蓝牙和飞行模式的开启与关闭(私有API)
- iOS设备中WiFi、蓝牙和飞行模式的开启与关闭
- 越狱开发之iOS设备中WiFi信号的开启与关闭
- Android 蓝牙设备的开启与关闭功能的实现
- Android 用代码开启和关闭飞行模式
- app中蓝牙开启与关闭
- 控制GPS/WIFI/蓝牙/飞行模式
- Android飞行模式的打开与关闭
- iOS 中定时器的开启和关闭
- iOS 中定时器的开启和关闭
- [Android]开启/关闭/监听 飞行模式
- Android开启/关闭/监听 飞行模式
- 飞行模式开启时关闭收音机
- Android利用代码开启关闭飞行模式
- 可变参数宏
- IBM成功制出石墨烯射频接收器 已通过文本信息收发测试
- 使用IBM PureFlex System设置和部署弹性虚拟服务器
- 函数memcpy,strcpy用法
- 常见算法总结
- iOS设备中WiFi、蓝牙和飞行模式的开启与关闭
- After Effects CS4 启动提示找不到兼容QuickTime的解决办法
- 23个.net开源项目框架
- Linux rpm 命令参数使用详解[介绍和应用]
- 在PowerVM虚拟化环境下,微分区CPU利用率的监控方法
- webkit---缩放重排
- cocos2d-x在eclipse上搭建开发环境(全网最标准方法,不要cywin)
- KVM基于X86硬件辅助的虚拟化技术实现机制
- i9500八核港版ZSUAMDF固件(2013-5-2)root攻略