iPhone关闭蓝牙GKPeerPickerController

时间:2012-06-19 13:40:31

标签: iphone ipad bluetooth gkpeerpickercontroller

我同意这个问题是重复的。请多多包涵。我也是你们所有人都相信不可能以编程方式打开/关闭蓝牙。

但如果蓝牙未启用,则使用GKPeerPickerController会提示将其打开。足够公平地打开蓝牙。

我打赌我相信我们无法以编程方式关闭蓝牙,因为没有办法。但this application这样做,所以我没有选择拒绝。

我只想确认是否可能,如果是,如何使用GKPeerPickerController或任何其他公共API方式关闭蓝牙?

2 个答案:

答案 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类/框架。

由于