SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

iPhone Bluetoothプログラミング

Bluetoothを使用したiPhone相互通信アプリを作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

Searching for Peer Devices

 これでプロジェクトの枠組みができたので、次は他のBluetoothデバイスにアクセスするためのAPIについて見ていきます。

 BluetoothViewController.hファイル内でGKPeerPickerControllerオブジェクトを宣言します。

#import "BluetoothViewController.h"
#import 

@implementation BluetoothViewController

@synthesize currentSession;
@synthesize txtMessage;
@synthesize connect;
@synthesize disconnect;

GKPeerPickerController *picker;

 GKPeerPickerControllerクラスは、他のBluetoothデバイスを検索して接続する機能の標準UIを提供します。他のBluetoothデバイスに接続するときにはこれを使うのが1番簡単です。

 他のBluetoothデバイスを検索して接続するには、btnConnect:メソッドを次のように実装します。

-(IBAction) btnConnect:(id) sender {
    picker = [[GKPeerPickerController alloc] init];
    picker.delegate = self;
    picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;      

    [connect setHidden:YES];
    [disconnect setHidden:NO];    
    [picker show];    
}

 connectionTypesMaskプロパティは、ユーザーが選択できる接続の種類を表します。GKPeerPickerConnectionTypeNearbyGKPeerPickerConnectionTypeOnlineの2種類が使用でき、Bluetooth通信ではGKPeerPickerConnectionTypeNearby定数を使用します。GKPeerPickerConnectionTypeOnline定数はインターネットベースの接続を表します。

 リモートBluetoothデバイスが複数検出され、ユーザーがそのうち1つを選択して接続したときは、peerPickerController:didConnectPeer:toSession:メソッドが呼び出されます。そのため、このメソッドは次のように実装します。

- (void)peerPickerController:(GKPeerPickerController *)picker 
              didConnectPeer:(NSString *)peerID 
                   toSession:(GKSession *) session {
    self.currentSession = session;
    session.delegate = self;
    [session setDataReceiveHandler:self withContext:nil];
picker.delegate = nil;

    [picker dismiss];
    [picker autorelease];
}

 ユーザーがピアBluetoothデバイスに接続したら、GKSessionオブジェクトをcurrentSessionプロパティに保存します。これにより、GKSessionオブジェクトを使用してリモートデバイスと通信できるようになります。

 ユーザーがBluetooth Pickerをキャンセルした場合は、peerPickerControllerDidCancel:メソッドが呼び出されます。このメソッドは次のように定義します。

- (void)peerPickerControllerDidCancel:(GKPeerPickerController *)picker
{
    picker.delegate = nil;
    [picker autorelease];
    
    [connect setHidden:NO];
    [disconnect setHidden:YES];
}

 接続したデバイスから切断するには、GKSessionオブジェクトからdisconnectFromAllPeersメソッドを使用します。btnDisconnect:メソッドを次のように定義します。

-(IBAction) btnDisconnect:(id) sender {
    [self.currentSession disconnectFromAllPeers];
    [self.currentSession release];
    currentSession = nil;
    
    [connect setHidden:NO];
    [disconnect setHidden:YES];
}

 デバイスが接続または切断されると、session:peer:didChangeState:メソッドが呼び出されます。このメソッドは次のように実装します。

- (void)session:(GKSession *)session 
           peer:(NSString *)peerID 
 didChangeState:(GKPeerConnectionState)state {
    switch (state)
    {
        case GKPeerStateConnected:
            NSLog(@"connected");
            break;
        case GKPeerStateDisconnected:
            NSLog(@"disconnected");
            [self.currentSession release];
            currentSession = nil;
            
            [connect setHidden:NO];
            [disconnect setHidden:YES];
            break;
    }
}

 このイベントを処理すると、接続が確立または終了したタイミングを検出できます。例えば、接続が確立されたらすぐに相手デバイスに向けてデータの送信を開始したいときなどに利用できます。

次のページ
データの送信

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Wei-Meng Lee(Wei-Meng Lee)

Microsoft MVP受賞者。Microsoft社の最新テクノロジー実地研修を専門とするDeveloper Learning Solutions社を創設。.NETとワイヤレステクノロジーの開発者、指導者として知られる。国際的なカンファレンスでたびたび講演し、.NET、XML、ワイヤレステクノロジーに関す...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4800 2010/04/19 19:08

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング