Программно включить Bluetooth в iphone sdk?
Я видел много вопросов об этом, но никто на самом деле не дает реального ответа (рамки для импорта, фактический код и т.д.). Они говорят только с приватным api, и это приведет к тому, что ваше приложение будет отклонено из магазина приложений.
Я знаю, что использование приватного api приведет к тому, что мое приложение будет отклонено. Мне было интересно, как это сделать для личного использования. (iPhone SDK 3.1.2, iPod touch 2g)
Ответы
Ответ 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];
не работает