我同意这个问题是重复的。请多多包涵。我也是你们所有人都相信不可能以编程方式打开/关闭蓝牙。
但如果蓝牙未启用,则使用GKPeerPickerController
会提示将其打开。足够公平地打开蓝牙。
我打赌我相信我们无法以编程方式关闭蓝牙,因为没有办法。但this application这样做,所以我没有选择拒绝。
我只想确认是否可能,如果是,如何使用GKPeerPickerController
或任何其他公共API方式关闭蓝牙?
答案 0 :(得分:2)
我知道这不是您想要的答案,但没有,您无法使用Apple批准的API以编程方式关闭蓝牙。
有许多应用approved on the App Store this year that have done this。
但是,一旦他们(Apple)意识到正在发生的事情,他们会在发布后不久被Apple取消。他们当然使用私有API。
要么开发人员都愚蠢地认为他们不会被注意到,或者他们只是希望在Apple推出应用程序之前获得几周的收入,这可能足以偿还他们的成本,并带来一些利润
问题在于有很多方法可以检查应用是否使用私有API。如果开发人员以正常方式使用Objective-C框架,那么这是一个简单的检查。实际上,Xcode does some of this automatically当您使用它将app二进制文件上传到iTunes Connect时。但是,这不是一个完整的检查。一旦进入Apple,审阅者就会执行另一项检查,我能够推断出这种检查比Xcode更复杂。
然而,这个检查仍然不完美,我是意见,这不一定是懒惰的审稿人只是忘记执行检查。 Objective-C为您提供了obfuscating方法调用的一些技巧。根据您使用这些技术的方式,可能会越过审核者。根据我的经验,我有充分的理由(眨眼,眨眼)相信Apple并没有在iOS的完全检测版本上运行每个应用程序,这可以记录所有函数调用,甚至打败最好的尝试通过混淆技术隐藏私有API使用。
所以,我几乎可以向您保证,这解释了您在App Store上找到的关闭蓝牙的应用程序。公共GameKit API允许您打开蓝牙,但不能关闭。
免责声明:我从未为Apple工作过,也没有Apple内部人员向我提供过任何信息。但是,我通过审核流程获得了私有API。
答案 1 :(得分:-1)
请尝试以下代码,我认为它也适合您。
Class BluetoothManagerClass = objc_getClass( "BluetoothManager" );
BluetoothManager *btCont; = [BluetoothManagerClass sharedInstance];
[btCont setPowered:NO];
您需要在项目中添加BluetoothManager类/框架。
由于