9

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

但是GKPeerPickerController如果蓝牙未打开,用户将被提示打开它。足够公平,可以打开蓝牙。

我打赌我相信我们不能以编程方式关闭蓝牙,因为没有办法。但是这个应用程序这样做了,所以我没有选择拒绝。

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

4

2 回答 2

2

我知道这不是您想要的答案,但是,您不能使用 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。

于 2012-06-26T03:49:57.783 回答
-1

请尝试以下代码,我认为它也适合您。

Class BluetoothManagerClass = objc_getClass( "BluetoothManager" );
    BluetoothManager *btCont; = [BluetoothManagerClass sharedInstance];

 [btCont setPowered:NO];

您需要在项目中添加 BluetoothManager 类/框架。

谢谢

于 2012-06-29T13:16:22.563 回答