以编程方式打开iPhone SDK中的蓝牙?

我已经看到很多关于这个的问题,但没有人给出真正的答案(导入框架,实际代码等)。 他们只能说一个私人API,这会让你的应用程序被拒绝从应用程序商店。

我知道,使用私人api会让我的应用程序被拒绝,我想知道如何做到个人使用。 (iPhone SDK 3.1.2,iPod touch 2g)

我也一直在研究这个。 您需要在项目中包含bluetoothmanager框架和头文件。 它应该

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/PrivateFrameworks/BluetoothManager.framework/

如果头文件不存在,则需要获取从库生成的.h文件,并将其包含在项目中。 我用Googlefind它; 这里是一个:

http://iphone-dev.googlecode.com/svn/branches/include-1.2-sdk/include/BluetoothManager/

一旦添加到项目中,如果头文件已经在框架中,则导入应该如下所示:

#import <BluetoothManager/BluetoothManager.h> 

或者,如果您将自己的BluetoothManager.h文件添加到您的项目中:

 #import "BluetoothManager.h 

在这里切换蓝牙是代码:

 BluetoothManager *manager = [BluetoothManager sharedInstance]; [manager setEnabled:![manager enabled]]; 

我已经build立了一个实用程序来做到这一点,它确实工作。 注意,如果您只想创build一个实用程序来切换蓝牙并退出,而无需任何UI,则在XCode中创build一个新项目并使用基于窗口的应用程序模板。 将代码添加到didFinishLaunchingWithOptions方法,并用exit(0)replace[window makeKeyAndVisible]

您需要确保在PrivateFrameworks文件夹下的二进制文件和头文件都是两个:

 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/System/Library/PrivateFrameworks 

这将允许您导入PrivateFrameworks,如BluetoothManager.framework到您的应用程序,并没有得到错误。 你可以find如何获得在线标题。 这适用于3.1.2 +导致我正在写一个应用程序,现在可以完美地在我的设备上以及Sim上运行。

如果你要在模拟器中testing,请使用以下命令:

 #if TARGET_IPHONE_SIMULATOR //This is where simulator code goes that use private frameworks #else /* this works in iOS 4.2.1 */ Class BluetoothManager = objc_getClass("BluetoothManager"); id btCont = [BluetoothManager sharedInstance]; [btCont setPowered:YES]; #endif 
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. #if TARGET_IPHONE_SIMULATOR exit( EXIT_SUCCESS ) ; #else /* this works in iOS 4.2.3 */ Class BluetoothManager = objc_getClass( "BluetoothManager" ) ; id btCont = [BluetoothManager sharedInstance] ; [self performSelector:@selector(toggle:) withObject:btCont afterDelay:1.0f] ; #endif return YES ; } #if TARGET_IPHONE_SIMULATOR #else - (void)toggle:(id)btCont { BOOL currentState = [btCont enabled] ; [btCont setEnabled:!currentState] ; [btCont setPowered:!currentState] ; } #endif 

上述方法将在iOS 4.2.3中工作

要获得BluetoothManager私有api的工作,您需要执行以下操作:1.获取由Harkonian指定的4个头文件,并将它们添加到您的SDK文件中(将头文件添加到您的项目中)2.将Framework添加到您的项目(添加二进制文件到您的项目)3.创build一个variables,用于与BluetoothManager服务工作示例:btManager = [BluetoothManager sharedInstance]; 4.使用BluetoothManager的方法,你可以在BluetoothManager.h中看到它们

我把一个完整的样本放在这里: http : //www.pocketmagic.net/?p = 2827

希望这有助于拉杜

我相信解决办法是做一个系统调用launchctl,因为这是负责启动/停止系统服务的守护进程。

随着iPhone 5s
[btCont setEnabled:!currentState]; [btCont setPowered:!currentState];
没有运行