我同意这个问题是重复的。请耐心听我说。我也是你们中的一员,相信通过编程打开/关闭蓝牙是不可能的。
但是,如果蓝牙未打开,则会提示用户打开GKPeerPickerController。足够打开蓝牙了。
我敢打赌,我们不能通过编程关闭蓝牙,因为没有办法。但是this application这样做了,所以我没有选择拒绝。
我只想确认是否有可能,如果可以,如何使用GKPeerPickerController或任何其他公共api方式关闭蓝牙?
发布于 2012-06-26 11:49:58
我知道这不是你想要的答案,但是no,你不能用苹果认可的API以编程方式关闭蓝牙。
已经有很多应用程序approved on the App Store this year that have done this了。
但是,一旦他们(苹果)意识到发生了什么,他们在发布后不久就一直被苹果删除。他们肯定是在使用私有API。
要么开发人员愚蠢到认为他们不会被注意到,要么他们只是希望在苹果下架应用程序之前获得几周的收入,这可能足以偿还他们的成本,并获得一些利润。
问题是,有许多方法可以检查应用程序是否使用私有API。如果开发人员以正常的方式使用objective-C框架,这是一个很容易检查的问题。事实上,当你使用它来上传应用程序二进制文件到iTunes连接时,Xcode does some of this automatically。但是,这并不是一个完整的检查。一旦到了苹果,评审员就会执行另一项检查,我可以推断出这比Xcode做的要复杂得多。
然而,这种检查仍然不是完美的,我认为这不一定是懒惰的审查者忘记执行检查的问题。Objective-C为您提供了一些obfuscating方法调用的技术。根据您如何使用这些技术,您可能会通过审查者。在我的经验中,我有充分的理由(眨眼,眨眼)相信苹果并不是在一个完全工具化的iOS版本上运行每个应用程序,这可能会记录所有的函数调用,并挫败即使是通过混淆技术隐藏私有API使用的最好的尝试。
所以,我几乎可以向你保证,这解释了你在App Store上找到的关闭蓝牙的应用程序。公共GameKit API允许您打开蓝牙,但不能关闭蓝牙。
免责声明:我从来没有为苹果工作过,也没有苹果内部人士给我提供信息。但是,我已经通过审查过程得到了私有API。
发布于 2012-06-29 21:16:23
请尝试下面的代码,我认为它也可以为你工作。
Class BluetoothManagerClass = objc_getClass( "BluetoothManager" );
BluetoothManager *btCont; = [BluetoothManagerClass sharedInstance];
[btCont setPowered:NO];您需要在项目中添加BluetoothManager类/框架。
谢谢
https://stackoverflow.com/questions/11102216
复制相似问题