web-dev-qa-db-ja.com

iOSでBluetoothやWi-Fiのオンとオフをプログラムで切り替える方法はありますか?

IOS 4.xデバイス(iPhoneとiPad)でBluetoothとWi-Fiの両方をオンとオフの状態に切り替える簡単な方法を探しています。

さまざまな場所や使用シナリオ間を移動するときに、これらの機能を常に切り替えています。現在、複数回タップして設定アプリにアクセスする必要があります。 Springboardにあるシンプルなアプリを作成したいと思っています。タップするだけで、Wi-Fiがオンになっている場合はオフになり、その逆の場合はすぐに終了します。同様に、Bluetoothの状態を切り替えるためのアプリを使用します。

私は開発者SDKを持っており、XcodeとiOS開発に慣れているので、アプリを作成するために必要なコードを記述できてうれしいです。プライベートかどうかに関係なく、これらの機能の状態を単純に切り替えるために必要な機能を備えているAPIがどれか迷っています。

これは非常に個人的なかゆみを掻き立てるものであるため、アプリを販売したり、App Storeで入手したりするつもりはありません。したがって、APIの使用に関するアプリのガイドラインに準拠することは問題ではありません。コアソフトウェアを出荷時のままにしておきたいので、私がしたくないのはデバイスをジェイルブレイクすることです。

私のGoogle-fuが私を失望させているので、誰かがこの目標を達成するためのサンプルコードや詳細情報を教えてもらえますか?4.xデバイスの情報がそこにあると、私はそれを見つけることができません。

20
creednmd

Matt Farrugia(Twitterの@mattfarrugia)のおかげで、私が探していた答えは次のとおりでした。

- (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:0.1f] ;
#endif
    return YES ;
}

#if TARGET_IPHONE_SIMULATOR
#else
- (void)toggle:(id)btCont
{
    BOOL currentState = [btCont enabled] ;
    [btCont setEnabled:!currentState] ;
    [btCont setPowered:!currentState] ;
    exit( EXIT_SUCCESS ) ;
}
#endif

Gamekitフレームワークに対してもリンクする必要がありますが、このコードを新しいXcodeプロジェクトに追加して、デバイスで実行するだけです。そうすることで、Bluetoothのオンとオフを切り替える1タップのアプリが作成されます。

25
creednmd