Подтвердить что ты не робот

Программно включить Bluetooth в iphone sdk?

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

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

4b9b3361

Ответ 1

Я тоже изучал это. Вам нужно включить в проект проект структуры 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

Для переключения bluetooth вот код:

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

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

Ответ 2

Вам нужно убедиться, что файлы и файлы заголовка ОБОИХ в папках 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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

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