我同意这个问题是重复的。请多多包涵。我也和你们一样相信以编程方式打开/关闭蓝牙是不可能的。
但是GKPeerPickerController
如果蓝牙未打开,用户将被提示打开它。足够公平,可以打开蓝牙。
我打赌我相信我们不能以编程方式关闭蓝牙,因为没有办法。但是这个应用程序这样做了,所以我没有选择拒绝。
我只是想确认它是否可能,如果是,如何使用GKPeerPickerController
或任何其他公共 api 方式关闭蓝牙?
我同意这个问题是重复的。请多多包涵。我也和你们一样相信以编程方式打开/关闭蓝牙是不可能的。
但是GKPeerPickerController
如果蓝牙未打开,用户将被提示打开它。足够公平,可以打开蓝牙。
我打赌我相信我们不能以编程方式关闭蓝牙,因为没有办法。但是这个应用程序这样做了,所以我没有选择拒绝。
我只是想确认它是否可能,如果是,如何使用GKPeerPickerController
或任何其他公共 api 方式关闭蓝牙?
我知道这不是您想要的答案,但是不,您不能使用 Apple 批准的 API 以编程方式关闭蓝牙。
今年在 App Store 上批准了许多应用程序已经做到了这一点。
但是,一旦他们(Apple)意识到发生了什么,他们就会在发布后不久被Apple删除。他们肯定在使用私有 API。
要么开发者愚蠢地认为他们不会被注意到,要么他们只是希望在苹果下架应用程序之前获得几周的收入,这可能足以偿还他们的成本,并获得一些利润。
问题是有多种方法可以检查应用程序是否使用私有 API。如果开发人员以正常方式使用 Objective-C 框架,这很容易检查。事实上,当您使用 Xcode 将应用程序二进制文件上传到 iTunes Connect 时, Xcode 会自动执行其中的一些操作。但是,这不是一个完整的检查。到了 Apple 之后,审阅者又进行了一次检查,我可以推断出这比 Xcode 所做的更复杂。
但是,该检查仍然不完美,我认为这不一定是懒惰的审阅者忘记执行检查的问题。Objective-C 为您提供了一些混淆方法调用的技术。根据您使用这些技术的方式,您可能会通过审阅者。以我的经验,我有充分的理由(眨眼,眨眼)相信 Apple 并没有在完全仪器化的 iOS 版本上运行每个应用程序,它可以记录所有函数调用,甚至挫败通过混淆隐藏私有 API 使用的最佳尝试技巧。
因此,我几乎可以向您保证,这解释了您在 App Store 上找到的关闭蓝牙的应用程序。公共 GameKit API 可让您打开蓝牙,但不能关闭。
免责声明:我从未为 Apple 工作过,也没有 Apple 内部人员向我提供信息。但是,我通过审查过程获得了私有 API。
请尝试以下代码,我认为它也适合您。
Class BluetoothManagerClass = objc_getClass( "BluetoothManager" );
BluetoothManager *btCont; = [BluetoothManagerClass sharedInstance];
[btCont setPowered:NO];
您需要在项目中添加 BluetoothManager 类/框架。
谢谢