2009-11-16 4 views
18

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

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

ответ

0

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

+0

Вот ссылка на страницу launchctl человек: http://developer.apple.com/Mac/library/documentation/Darwin/Reference/ManPages/man1/launchctl.1.html%5D –

+0

SUDO launchctl load com.apple.BTServer –

+0

sudo launchctl unload com.apple.BTServer –

7

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

Я пробовал это, и хотя я правильно загружаю класс BluetoothManager и получаю общий экземпляр это ... это просто ничего не делает. Вызов включен всегда возвращает NO, даже если Bluetooth включен. Вызов setEnabled никогда не меняет свое состояние. Абсолютно каждый другой вызов BluetoothManager, который я пробовал, всегда возвращает NO, nil, 0-элементные массивы и т. Д. Короче говоря, BluetoothManager, который возвращается, кажется полностью стерилизованным. (Я убегаю от своего iPhone 4.2.1, а не симулятора.) Как люди заставляют это работать? Благодарю. –

+1

Вышеупомянутый код, безусловно, не работает на iOS 4.2.1. Это работало на 3.x, и WrightsCS, по-видимому, просто обновил свой комментарий, заменив 3.x на 4.2. Он строит, но не работает на реальном устройстве. – Nate

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 

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

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

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

+1

Просто обновление. Это решение отлично подойдет для OS 3.x, но перестало работать в iOS 4.0. – Nate

+0

Я нахожу трюк, и он работает в ios 4.3.5 скачать файл заголовков с сайта указывает, а затем не вставлять в проект, а просто копировать в PrivateFramework! вам нужно создать папку «Заголовки» в разделе /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/PrivateFrameworks/BluetoothManager.framework/, затем скопируйте все 4 загруженные файлы, импортируйте инфраструктуру BluetooothManager в вашем проекте (вам нужно выбрать, используя «добавить другое», то работает вышеописанный код! – Achille

+0

@Achille, можете ли вы рассказать мне, что именно говорит ваш оператор импорта? – mheavers

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 

выше метод будет работать в прошивкой 4.2.3

3

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

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

Надеется, что это помогает, Radu

+0

Это было разработано для OS 5.1 и протестирован на самом аппаратном обеспечении iPod. Просто добавьте эту информацию, поскольку многие пользователи жаловались с проблемами, возникающими при использовании новых версий ОС. Он все еще отлично работает! – radhoo

+0

Прекрасно работает с 'XCode 5.1.1' и' iOS 7.1'. –

0

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

Смежные вопросы