これについて多くの質問を見てきましたが、実際に本当の答えを出す人は誰もいません (インポートするフレームワーク、実際のコードなど)。彼らはプライベートAPIを使用しているだけで、アプリストアからアプリが拒否されると言っています.
プライベート API を使用するとアプリが拒否されることは承知しています。(iPhone SDK 3.1.2、iPod touch 2g)
これについて多くの質問を見てきましたが、実際に本当の答えを出す人は誰もいません (インポートするフレームワーク、実際のコードなど)。彼らはプライベートAPIを使用しているだけで、アプリストアからアプリが拒否されると言っています.
プライベート API を使用するとアプリが拒否されることは承知しています。(iPhone SDK 3.1.2、iPod touch 2g)
私もこれを調べてきました。プロジェクトに bluetoothmanager フレームワークとヘッダー ファイルを含める必要があります。入っているはずです
/開発者/プラットフォーム/iPhoneOS.platform/開発者/SDKs/iPhoneOS3.0.sdk/システム/ライブラリ/PrivateFrameworks/BluetoothManager.framework/
ヘッダー ファイルが存在しない場合は、ライブラリから生成された .h ファイルを取得して、プロジェクトに含める必要があります。私はそれを見つけるためにグーグルで検索しました。ここに1つがあります:
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]];
これを自分で行うためのユーティリティを作成しましたが、機能します。Bluetooth を切り替えて UI を使用せずに終了するユーティリティを作成するだけの場合は、XCode で新しいプロジェクトを作成し、ウィンドウベースのアプリケーション テンプレートを使用します。コードを didFinishLaunchingWithOptions メソッドに追加し、 に置き換え[window makeKeyAndVisible]
ますexit(0)
。
バイナリとヘッダーファイルの両方が以下の PrivateFrameworks フォルダーにあることを確認する必要があります。
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk/System/Library/PrivateFrameworks
これにより、BluetoothManager.framework などの PrivateFrameworks をアプリにインポートでき、エラーが発生しなくなります。ヘッダーをオンラインで取得する方法を見つけることができます。これは 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
- (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 で動作します
BluetoothManager プライベート API を機能させるには、次の手順を実行する必要があります。 1. Harkonian によって示される 4 つのヘッダー ファイルを取得し、それらを SDK ファイルに追加します (ヘッダー ファイルをプロジェクトに追加します) 2. フレームワークをプロジェクトに追加します (追加バイナリ ファイルをプロジェクトに追加します) 3. BluetoothManager サービスを操作するための変数を作成します。 例: btManager = [BluetoothManager sharedInstance]; 4. BluetoothManager のメソッドを使用します。それらはすべて BluetoothManager.h で確認できます。
ここで入手できる完全なサンプルをまとめました: http://www.pocketmagic.net/?p=2827
これが役に立てば幸いです、Radu
解決策は、launchctlをシステムコールすることだと思います。これは、システムサービスの開始/停止を担当するデーモンだからです。
Iphone 5s
では [btCont setEnabled:!currentState] ; [btCont setPowered:!currentState] ;
走っていない