我已经看到很多关于此的问题,但实际上没有人给出真正的答案(导入框架,实际代码等)。他们只说私人api,这会让你的应用程序被应用商店拒绝。
我知道使用私人api会让我的应用被拒绝,我想知道如何将其用于个人用途。 (iPhone SDK 3.1.2,iPod touch 2g)
答案 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];
没有运行