iOS设备中WiFi、蓝牙和飞行模式的开启与关闭

蓝牙文件传输全攻略:Windows/macOS/Android/iOS跨设备实操与排查 蓝牙文件传输基于经典蓝牙BR/EDR协议,通过OBEX/FTP等Profile实现设备间点对点数据交换,不依赖WiFi或蜂窝网络。理解经典蓝牙与BLE的区别、协议栈的层次关系,有助于快速定位问题。在实际使用中,常见故障如蓝牙驱动未正确安装导致设备无法枚举、蓝牙连接不上或配对失败后无法发送文件,往往与可见性、配对流程及系统服务状态相关。该技术适用于离线办公、短距离小文件交换、嵌入式调试等场景,用户可在断网环境下通过蓝牙直接共享文档、照片和配置文件。文章按Windows、macOS、Android、iOS平台分 阅读详情

转自: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请到我的资源里下载

#import <UIKit/UIKit.h>
#import <BluetoothManager/BluetoothManager.h>
//#import <SpringBoard/SBWiFiManager.h>

@interface hylViewController : UIViewController{
    BOOL isBlueToothOn;
    BOOL isWlanOn;
}

@end

#import "hylViewController.h"

@implementation hylViewController
#pragma mark - View lifecycle
- (void)viewDidLoad
{
    [super viewDidLoad];

Class BluetoothManager = objc_getClass( "BluetoothManager" ) ;
    id btCont = [BluetoothManager sharedInstance] ;
    isBlueToothOn = [btCont enabled] ;
UISwitch *blueTouthSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(150,50,0,0)];
    [blueTouthSwitch addTarget:self action:@selector(BlueTouthSwitchAction:) forControlEvents:UIControlEventValueChanged];
    blueTouthSwitch.on = isBlueToothOn;
    [self.view addSubview:blueTouthSwitch];
    [blueTouthSwitch release];
}

-(void)BlueTouthSwitchAction:(id)sender
{
    #if TARGET_IPHONE_SIMULATOR
        exit( EXIT_SUCCESS ) ;
    #else
        /* this works in iOS 4.2.3 */
        Class BluetoothManager = objc_getClass( "BluetoothManager" );
        id btCont = [BluetoothManager sharedInstance];
        [self performSelector:@selector(toggle:) withObject:btCont afterDelay:1.0f];
    #endif
}
#if TARGET_IPHONE_SIMULATOR
#else
- (void)toggle:(id)btCont
{
        BOOL currentState = [btCont enabled] ;
        [btCont setEnabled:!currentState] ;
        [btCont setPowered:!currentState] ;
}
#endif
@end



经过我的测试是可以正常使用的。

注2:我们同样可以对飞行模式作开启和关闭操作:

首先:我们从SpringBoard中可以dump出SBTelephonyManager和SBStatusBarDataManager这两个 类,前者主要负责功能的开关,后者则是负责UI显示的。使用SBTelephonyManager的isInAirplaneMode方法可以得到当前的 飞行模式状态,setIsInAirplaneMode:这个方法来设置飞行模式。使用SBStatusBarDataManager的 airplaneModeChanged和_updateSignalStrengthItem来刷新UI显示状态。


IOS_使用私有API实现蓝牙功能 使用私有API实现蓝牙功能 实现打开关闭,给出提示,如果需要搜索周边蓝牙等可以跟到程序里看相关API。 不过是私有API,请慎用噢,使用了私有API的IOS APP是不能通过APP store审核的。 立即下载

相关推荐

VS2019 C# MySQL 学生信息增删改查(一、增删)

VS2019 C# MySQL 学生信息增删改查 由于刚刚学习VS2019,入手的第一个例子是编写一个简单的增删改查。这里,我以学生信息为例,进行详细的过程描述以及代码实现。 一、 新建一个Windows窗体应用程序 1、创建新项目界面,如下图所示。 2、更改项目名称,当然不修改也可以。我这里的是“StudentInfoSystem”;项目存放位置路径根据自己需要进行更改;“将解决方案和项目放在同一目录中”前面的勾选框,选不选都可以;点击“创建”,如下图所示。 二、前期准备工作 1、将Form1属性中

青哥 1万+

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

转自:http://www.cnblogs.com/OtionSky/archive/2011/11/08/iOS_WiFi_Controller.html 今天写了一段有关在iPhone程序中开关WiFi型号的代码,经测试运行良好。 我想不用我多说大家都应该知道以上的功能只能在越狱的设备中实现! 好了,闲话稍少叙,进入正题: 1.首先要在SpringBoard启动之后,我们...

weixin_30709635的博客 411

2024年最全scrapy+scrapyd+gerapy 爬虫调度框架,字节跳动面试时间

scrapyd是一个用于部署和运行scrapy爬虫的程序,它允许你通过JSON API来部署爬虫项目和控制爬虫运行,scrapyd是一个守护进程,监听爬虫的运行和请求,然后启动进程来执行它们方便地控制爬虫运行直观地查看爬虫状态实时地查看爬取结果简单地实现项目部署统一地实现主机管理轻松地编写爬虫代码。

2401_84140653的博客 1200

iOS使用privateframework开启蓝牙教程

有个项目需要研究非ios设备与ios设备的连接,之前了解到苹果的官方api是不支持这个操作的,于是便开始研究苹果的私有api。 在cc上也有很多帖子讨论过,但始终没什么实质性进展。 本人经过一番google,成功使用私有api开启了iphone的蓝牙。现在把方法分享出来,希望能给大家提供一些思路。 1.首先在/Developer/Platforms/iPhoneOS.platform/D

wyymaomi的专栏 1009

ADS入门学习笔记——射频振荡器的设计

振荡器是射频系统中的基本部件之一,可以将直流功率转换为射频功率,在特定的频率点建立起稳定的正弦振荡,成为所需的射频信号源。

weixin_42126696的博客 8947

APM32取代STM32的经验分享

我仔细检查了代码中与硬件相关的部分,例如外设寄存器的访问和中断处理程序的设置,并进行了相应的修改。在本文中,我将分享我将APM32引入项目中取代STM32的经验,并提供相应的源代码。我查看了APM32的官方网站、开发者论坛和相关社交媒体,了解了开发者社区的活跃度和可用的资源。总结起来,将APM32替换STM32的过程需要经过几个关键步骤:了解APM32的规格和功能、评估软件生态系统、迁移代码和调试,以及性能和功耗优化。在开始替换之前,我对APM32进行了详细的研究和评估,以确保它能够满足项目的需求。

UplKubernetes的博客 2004

6S设备开关飞行模式私有API失效及解决办法

背景: 6S以前的设备均支持以私有API的方式开关飞行模式。但6S若在子线程中调用,失效。 有解决方案,但不成熟,有需要者可以交流。

skwaityou的专栏 1202

光学系统仿真软件:Finesse_(6).噪声分析与优化

在Finesse中,噪声源的定义可以通过在光学元件的参数中添加噪声项来实现。以下是一个简单的示例,展示了如何在激光器和反射镜中定义噪声源。# 定义噪声传递函数# 绘制噪声传递函数plot NTF1在这个例子中,定义了一个噪声传递函数NTF1,描述了激光器L1到反射镜M1的噪声传递过程。plot NTF1命令绘制了噪声传递函数的频谱图。# 定义耦合路径# 绘制耦合噪声频谱图plot C1在这个例子中,定义了一个耦合路径C1,描述了激光器L1和反射镜M1之间的噪声耦合关系。plot C1。

kkchenjj的博客 873

ios 随时检测蓝牙是否开启_如何在iPhone或iPad上检查蓝牙状态

想知道蓝牙状态指示器图标在iOS 12或更高版本中的位置吗?您可能还记得,启用了Bluetooth的iOS的早期版本具有Bluetooth图标,该图标会出现在iPhone或iPad屏幕顶部的状态栏中。但是,在iOS 12及更高版本中,蓝牙状态指示灯现在丢失了,并且蓝牙符号也不再出现在状态栏中。由于缺少蓝牙状态图标,因此某些iPhone和iPad用户可能对如何检查iOS 13和iOS 12中的蓝牙是...

weixin_39713814的博客 3885

Linux系统中u-boot启动流程分析(详解)

代码部分,具体如下;

嵌入式技术开发 1991

YOLOv11 损失函数进阶:SlideLoss 让小目标检测精度飙升

创建self.loss_fun = loss_fun # 基础损失函数(如BCEWithLogitsLoss)self.loss_coef = loss_coef # 损失系数# 计算滑动权重:根据预测与真实值的差异判断样本难度# 难度越高,权重越大该类在原有损失函数的基础上,通过diff计算样本预测与真实值的差异(差异越大,样本越难),进而生成动态权重,实现对难样本的重点学习。

m0_64661770的博客 210

iOS设备中WiFi、蓝牙和飞行模式的开启与关闭(私有API)

今天写了一段有关在iPhone程序中开关WiFi型号的代码,经测试运行良好。 我想不用我多说大家都应该知道以上的功能只能在越狱的设备中实现! 好了,闲话稍少叙,进入正题: 1.首先要在SpringBoard启动之后,我们要执行hook动作:   NSString *identifier = [[NSBundle mainBundle] bundleIdentifier];

zrhloveswallow的专栏 3496

Buck电源设计常见的一些问题(五)MOS管振荡抑制方法(三)

关于开关节点振荡的产生机制和抑制问题,总结了三种抑制方法。第一种方法是利用输入端的高频去耦电容;第二种方法是设计 RC 缓冲电路;第三种方法是优化自举电路的串联电阻。以上三种方法均通过实验加以验证,对开关节点振荡具有很好的抑制作用。应该综合同步 Buck 变换器的各项指标权衡设计。

小幽余生不加糖 1633

LINUX系统无线网频繁断开_谷歌准备在Android 11里解决开启飞行模式则蓝牙连接就断开的问题...

当前主流操作系统默认情况下都会在开启飞行模式时禁用蓝牙,同时被禁用的还有无线网络以及蜂窝网络连接等。包括Windows 10、iOS 以及 Android都采用同样的做法,但看起来现在这些做法已经过时需要尽早被修正过来。原本开启飞行模式禁用各种连接主要是防止无线通讯干扰飞机,现在已经有许多航空公司不再要求用户必须关机。因此对于大多数用户来说在飞机上开启飞行模式足以,至于无线网络和蓝牙连接是否被关闭...

weixin_39663970的博客 197

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

关于itouch/ipad 等设备的飞行模式

http://support.apple.com/kb/HT1355?viewlocale=zh_CN 一直不能理解在touch 或者不具备3G功能的pad上为什么要有airplane模式。今天在ios的官网上找到如下的回答: iOS:了解飞行模式 Last Modified: 十二月 13, 2011 Article: HT1355

牧草青园 4390

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

android 连接wifi设备同时启用4g_Android 11或有更智能飞行模式:开启时可不切断蓝牙连接...

[钉科技编译]随着越来越多智能手机把传统3.5mm耳机孔移除,让无线蓝牙耳机跟着火爆起来。不过,若是手机在开启飞行模式时,这时便会自动关闭移动数据上网、WiFi连接和禁用蓝牙无线连接等。其中,最让用户感到不便的就是开启飞行模式时自动切断蓝牙功能。当打开飞行模式蓝牙连接被切断时,用户不得不重新打开打开手机飞行模式,然后重新启用蓝牙功能,以便在飞行模式中继续使用无线耳机或其他用蓝牙连接的小工具。根据《...

weixin_33788424的博客 667

iOS设备中的蜂窝数据和3G数据的开启与关闭

这段时间由于工作的需要研究了一下iOS系统中蜂窝数据和3G的开启和关闭,也就是在系统的“设置”程序的“通用”项目的“网络”中我们看到的“开启3G”和“蜂窝数据”这两个开关: 在之前的随笔中我研究过了WiFi、蓝牙及飞行模式的开启与关闭,我理所当然的认为iOS系统中应该会有一个类型的单实例在维护这些开关,但是让我沮丧的是我几乎找遍了所有的框架及系统程序也没有找到有关的类及方法。后来还是通过对“...

weixin_34218890的博客 444
上一篇: 导出Private API
下一篇: iptables禁止端口和开放端口
我是一只懒虫
博客等级 码龄17年 147粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值