以编程方式打开iphone sdk中的蓝牙?

时间:2009-11-16 17:22:44

标签: iphone objective-c bluetooth ipod-touch

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

我知道使用私人api会让我的应用被拒绝,我想知道如何将其用于个人用途。 (iPhone SDK 3.1.2,iPod touch 2g)

6 个答案:

答案 0 :(得分:10)

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

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

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

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]];    

我已经构建了一个实用程序来自己完成这项工作。请注意,如果您只想创建一个实用程序来切换蓝牙并退出,而不使用任何UI,则在XCode中创建一个新项目并使用基于Window的应用程序模板。将代码添加到didFinishLaunchingWithOptions方法中,并将[window makeKeyAndVisible]替换为exit(0)

答案 1 :(得分:7)

您需要确保在以下的PrivateFrameworks文件夹中同时显示二进制文件和标题文件:

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

这将允许您将BluetoothFrameworks(如BluetoothManager.framework)导入到您的应用中,而不会出现错误。您可以在线找到如何获取标题。这适用于3.1.2 +因为我现在正在编写一个应用程序,它在我的设备和Sim上完美运行。

如果您要在模拟器中进行测试,请使用以下内容:

#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

答案 2 :(得分:5)

- (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

答案 3 :(得分:3)

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

我整理了一份完整的示例:http://www.pocketmagic.net/?p=2827

希望这有帮助, 拉杜

答案 4 :(得分:0)

我认为解决方案是对launchctl进行系统调用,因为那是负责启动/停止系统服务的守护进程。

答案 5 :(得分:0)

使用Iphone 5s
[btCont setEnabled:!currentState];     [btCont setPowered:!currentState];
没有运行