2009-11-16 134 views
18

我看到很多關於這個的問題,但實際上沒有人給出真正的答案(導入框架,實際代碼等)。他們只會用私人api說,這會讓你的應用在應用商店被拒絕。以編程方式打開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 – 2009-11-16 22:37:08

+0

須藤launchctl load com.apple.BTServer – 2009-11-16 22:43:26

+0

sudo launchctl unload com.apple.BTServer – 2009-11-16 22:43:58

7

你需要確保二進制文件和頭文件都在PrivateFrameworks文件夾下:

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

這將允許用戶導入PrivateFrameworks如BluetoothManager.framework到您的應用程序,並沒有得到錯誤。你可以找到如何在網上獲取標題。這適用於3.1.2 +因爲我現在正在編寫一個應用程序,可以在我的設備以及Sim上完美工作。

如果在模擬器上測試會使用以下:

​​
+0

我試過了,儘管我正確加載了BluetoothManager類並獲得了一個共享實例它......它只是沒有做任何事情。即使在啓用藍牙的情況下,啓用的呼叫始終返回NO。調用setEnabled從不改變它的狀態。絕對每一個我嘗試過的BluetoothManager調用都會返回NO,NIL,0元素數組等。總之,返回的BluetoothManager似乎完全被中止。 (我正在使用我的4.2.1 iPhone,而不是模擬器。)人們如何獲得這個工作?謝謝。 – 2011-02-14 19:23:35

+1

上面的代碼肯定不適用於iOS 4.2.1。這對3.x有效,而WrightsCS顯然只是通過用4.2替換3.x來更新他的評論。它構建,但不能在真實設備上運行。 – Nate 2011-03-15 07:47:59

10

我一直在尋找到這一點。您需要在項目中包含bluetoothmanager框架和頭文件。它應該

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/PrivateFrameworks/BluetoothManager.framework/

如果頭文件不在那裏,你需要抓取一個從庫生成的.h文件,並將其包含在你的項目中。我用Google找到它;這是一個在這裏:

http://iphone-dev.googlecode.com/svn/branches/include-1.2-sdk/include/BluetoothManager/

一旦被添加到您的項目,你的進口應該是這樣的,如果頭文件已經在框架:

#import <BluetoothManager/BluetoothManager.h> 

或者這個,如果你加入自己BluetoothManager.h文件到您的項目:

#import "BluetoothManager.h 

要切換這裏藍牙是代碼:

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

我已經構建了一個實用程序來做到這一點,它確實有效。請注意,如果您只想創建一個實用程序來切換藍牙並退出,而無需任何UI,請在XCode中創建一個新項目並使用基於窗口的應用程序模板。將代碼添加到didFinishLaunchingWithOptions方法中,並用exit(0)替換[window makeKeyAndVisible]

+1

只是一個更新。該解決方案對OS 3.x非常有用,但在iOS 4.0停止工作。 – Nate 2011-03-15 07:49:57

+0

我找到了竅門,它在ios中工作4.3.5 從網站下載標題文件指示,然後不放在您的項目,但只是複製PrivateFramework!您需要在/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/System/Library/PrivateFrameworks/BluetoothManager.framework/下創建「Headers」文件夾,然後複製下載的所有4個文件,然後導入BluetooothManager框架在你的項目中(你需要選擇使用「添加其他」,然後上面的代碼工作! – Achille 2011-10-12 07:14:56

+0

@Achille你能告訴我你的進口聲明究竟是什麼意思嗎? – mheavers 2012-01-03 19:44:50

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 

上述方法將在iOS版4.2.3工作

3

要獲得BluetoothManager私有API的工作,你需要做到以下幾點:1。 度日Harkonian指示的4個的頭文件,並將它們添加到您的SDK文件(將頭文件添加到您的項目中) 2。將Framework添加到您的項目中(將二進制文件添加到您的項目中) 3.創建一個變量,用於使用BluetoothManager服務 示例:btManager = [BluetoothManager sharedInstance]; 4.使用BluetoothManager的方法,你可以看到他們都在BluetoothManager.h

我把一個完整的樣本是可以在這裏找到:http://www.pocketmagic.net/?p=2827

希望這有助於 拉杜

+0

這是開發對於OS 5.1,並在實際的硬件上測試一個iPod,只是添加這個信息,因爲許多用戶抱怨在較新的操作系統版本上遇到問題。它仍然正常工作! – radhoo 2012-07-16 20:50:43

+0

適用於'XCode 5.1.1'和'iOS 7.1'。 – 2014-07-29 14:54:31

0

與iPhone 5S
[btCont setEnabled:!currentState]; [btCont setPowered:!currentState];
沒有運行