web-dev-qa-db-ja.com

プログラムでiphoneSDKのBluetoothをオンにしますか?

私はこれについて多くの質問を見てきましたが、実際に答えを出す人は誰もいません(インポートするフレームワーク、実際のコードなど)。彼らはプライベートAPIでのみ言うので、アプリはアプリストアから拒否されます。

プライベートAPIを使用すると、個人的な使用のためにそれを行う方法を考えていたため、アプリが拒否されることを認識しています。 (iPhone SDK 3.1.2、iPod touch 2g)

18
johnathon

私もこれを調べています。プロジェクトにbluetoothmanagerフレームワークとヘッダーファイルをインクルードする必要があります。それにあるべきです

/ Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/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
_

ここでBluetoothを切り替えるためのコードは次のとおりです。

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

私はこれを自分で行うためのユーティリティを構築しましたが、それは機能します。 UIを使用せずに、Bluetoothを切り替えて終了するユーティリティを作成するだけの場合は、XCodeで新しいプロジェクトを作成し、ウィンドウベースのアプリケーションテンプレートを使用することに注意してください。コードをdidFinishLaunchingWithOptionsメソッドに追加し、_[window makeKeyAndVisible]_をexit(0)に置き換えます。

10
memmons

バイナリとヘッダーファイルが両方とも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
7
WrightsCS
- (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

上記の方法はiOS4.2.3で機能します

5
Raj

BluetoothManagerプライベートAPIを機能させるには、次の手順を実行する必要があります。1。Harkonianによって示される4つのヘッダーファイルを取得し、それらをSDKファイルに追加します(ヘッダーファイルをプロジェクトに追加します)。2。フレームワークをプロジェクトに追加します(追加します)。プロジェクトへのバイナリファイル)3。BluetoothManagerサービスを操作するための変数を作成します。例:btManager = [BluetoothManager sharedInstance]; 4. BluetoothManagerのメソッドを使用します。これらはすべて、BluetoothManager.hで確認できます。

ここで入手できる完全なサンプルをまとめました: http://www.pocketmagic.net/?p=2827

これがお役に立てば幸いです、ラドゥ

3
radhoo

Iphone5sで
[btCont setEnabled:!currentState]; [btCont setPowered:!currentState];
走っていない

0
vualoaithu

解決策は、launchctlをシステムコールすることだと思います。これは、システムサービスの開始/停止を担当するデーモンだからです。

0
Epsilon Prime