Программно включить блютуз в iphone sdk? - PullRequest
18 голосов
/ 16 ноября 2009

Я видел много вопросов по этому поводу, но на самом деле никто не дает реального ответа (рамки для импорта, реальный код и т. Д.). Они говорят только с частным API, и это отклонит ваше приложение из магазина приложений.

Я знаю, что использование личного API приведет к отклонению моего приложения, потому что мне было интересно, как это сделать для личного использования. (iPhone SDK 3.1.2, iPod touch 2g)

Ответы [ 6 ]

10 голосов
/ 03 февраля 2010

Я тоже изучал это. Вам нужно включить в ваш проект фреймворк bluetoothmanager и файл заголовка. Это должно быть в

/ Разработчик / Платформы / iPhoneOS.platform / Разработчик / SDKs / iPhoneOS3.0.sdk / Система / Библиотека / PrivateFrameworks / BluetoothManager.framework /

Если заголовочный файл отсутствует, вам нужно взять файл .h, сгенерированный из библиотеки, и включить его в свой проект. Я погуглил, чтобы найти это; Вот один здесь:

http://iphone -dev.googlecode.com / СВН / филиалы / включать-1,2 SDK / включить / BluetoothManager /

Как только это будет добавлено в ваш проект, ваш импорт должен выглядеть так, если заголовочный файл уже был в фреймворке:

#import <BluetoothManager/BluetoothManager.h>

Или это, если вы добавили свой собственный файл BluetoothManager.h в ваш проект:

#import "BluetoothManager.h

Для переключения Bluetooth здесь есть код:

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

Я создал утилиту, чтобы сделать это сам, и она работает. Обратите внимание: если все, что вам нужно, это создать утилиту для переключения Bluetooth и выхода без какого-либо интерфейса пользователя, создайте новый проект в XCode и используйте шаблон приложения на основе окна. Добавьте код в метод didFinishLaunchingWithOptions и замените [window makeKeyAndVisible] на exit(0).

7 голосов
/ 12 декабря 2009

Необходимо убедиться, что двоичные файлы и заголовочные файлы ОБА в папках PrivateFrameworks в:

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

Это позволит вам импортировать PrivateFrameworks, например 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
5 голосов
/ 07 июля 2011
- (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 голосов
/ 17 июля 2012

Чтобы заставить работать частный API BluetoothManager, вам нужно сделать следующее: 1. получите 4 заголовочных файла, указанных Harkonian, и добавьте их в ваши SDK-файлы (добавив заголовочные файлы в ваш проект) 2. добавьте Framework в ваш проект (добавив двоичные файлы в ваш проект) 3. создать переменную, для работы с сервисом BluetoothManager Пример: btManager = [BluetoothManager sharedInstance]; 4. используйте методы BluetoothManager, вы можете увидеть их все в BluetoothManager.h

Я собрал полный образец, который доступен здесь: http://www.pocketmagic.net/?p=2827

Надеюсь, это поможет, Radu

0 голосов
/ 03 сентября 2014

с Iphone 5s
[btCont setEnabled:! CurrentState]; [btCont setPowered:! currentState];
не работает

0 голосов
/ 16 ноября 2009

Я считаю, что решение состоит в том, чтобы сделать системный вызов launchctl, поскольку это демон, отвечающий за запуск / остановку системных служб.

...