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

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

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


person johnathon    schedule 16.11.2009    source источник


Ответы (6)


Я тоже занимаюсь этим. Вам необходимо включить в свой проект фреймворк 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 и используйте шаблон оконного приложения. Добавьте код в метод didFinishLaunchingWithOptions и замените [window makeKeyAndVisible] на exit(0).

person Community    schedule 02.02.2010
comment
Просто обновление. Это решение отлично работало для OS 3.x, но перестало работать в iOS 4.0. - person Nate; 15.03.2011
comment
Я нашел уловку, и она работает в ios 4.3.5. Загрузите файл заголовков с сайта указываетd, затем не вставляйте его в свой проект, а просто скопируйте в PrivateFramework! вам нужно создать папку Headers в /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/PrivateFrameworks/BluetoothManager.framework/, затем скопируйте все 4 загруженных файла, затем импортируйте среду BluetooothManager в себя проект (вам нужно выбрать с помощью add other, тогда приведенный выше код работает! - person Achille; 12.10.2011
comment
@Achille, ты можешь сказать мне, что именно говорит твое заявление об импорте? - person mheavers; 03.01.2012
comment
@mheavers просто #import ‹BluetoothManager / BluetoothManager.h›, тогда я могу вызвать Class BluetoothManager = objc_getClass (BluetoothManager); id btCont = [общий экземпляр BluetoothManager]; - person Achille; 20.01.2012

Вам необходимо убедиться, что двоичные файлы и файлы заголовков находятся ОБЕИХ в папках 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
person WrightsCS    schedule 12.12.2009
comment
Я пробовал это, и хотя я правильно загружаю класс BluetoothManager и получаю его общий экземпляр ... он просто ничего не делает. Вызов включен всегда возвращает NO, даже если Bluetooth включен. Вызов setEnabled никогда не меняет своего состояния. Абсолютно каждый другой вызов BluetoothManager, который я пробовал, всегда возвращает NO, nil, массивы с 0 элементами и т. Д. Короче говоря, возвращаемый BluetoothManager кажется полностью кастрированным. (Я использую свой iPhone 4.2.1, а не симулятор.) Как люди заставляют это работать? Спасибо. - person Greg Maletic; 14.02.2011
comment
Приведенный выше код наверняка не работает на iOS 4.2.1. Это сработало на 3.x, и WrightsCS, по-видимому, только что обновил свой комментарий, заменив 3.x на 4.2. Он строится, но не работает на реальном устройстве. - person Nate; 15.03.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

person Raj    schedule 07.07.2011

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

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

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

person radhoo    schedule 16.07.2012
comment
Он был разработан для OS 5.1 и протестирован на реальном оборудовании, iPod. Просто добавляю эту информацию, поскольку многие пользователи жаловались на проблемы с ее реализацией в более новых версиях ОС. Он по-прежнему отлично работает! - person radhoo; 17.07.2012
comment
Прекрасно работает с XCode 5.1.1 и iOS 7.1. - person Jonathan F.; 29.07.2014

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

person Epsilon Prime    schedule 16.11.2009
comment
Вот ссылка на страницу руководства launchctl: developer.apple.com/Mac/library/documentation/Darwin/Reference/ - person Epsilon Prime; 17.11.2009
comment
sudo launchctl load com.apple.BTServer - person Epsilon Prime; 17.11.2009
comment
sudo launchctl выгрузить com.apple.BTServer - person Epsilon Prime; 17.11.2009
comment
launchctl list ‹- чтобы увидеть список всех сервисов - person Epsilon Prime; 17.11.2009

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

person vualoaithu    schedule 03.09.2014