SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

japan.internet.com翻訳記事

iPhone Bluetoothプログラミング

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

データの送信

 接続したBluetoothデバイスにデータを送信するには、GKSessionオブジェクトのsendDataToAllPeers:メソッドを使用します。送信するデータはNSDataオブジェクト経由で転送されます。そのため、各種データ(例えば画像などのバイナリデータ)を送信するためのアプリケーションプロトコルを自由に定義できます。mySendDataToPeers:メソッドを次のように定義します。

- (void) mySendDataToPeers:(NSData *) data
{
    if (currentSession) 
        [self.currentSession sendDataToAllPeers:data 
                                   withDataMode:GKSendDataReliable 
                                          error:nil];    
}

 btnSend:メソッドを次のように定義し、ユーザーが入力したテキストをリモートデバイスに送信できるようにします。

-(IBAction) btnSend:(id) sender
{
    //---convert an NSString object to NSData---
    NSData* data;
    NSString *str = [NSString stringWithString:txtMessage.text];
    data = [str dataUsingEncoding: NSASCIIStringEncoding];        
    [self mySendDataToPeers:data];        
}

データの受信

 相手デバイスからデータを受信すると、receiveData:fromPeer:inSession:context:メソッドが呼び出されます。このメソッドを次のように実装します。

- (void) receiveData:(NSData *)data 
            fromPeer:(NSString *)peer 
           inSession:(GKSession *)session 
             context:(void *)context {

    //---convert the NSData to NSString---
    NSString* str;
    str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];    
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Data received" 
                                                    message:str 
                                                   delegate:self 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];    
}

 受信したデータはNSData形式になっています。これをUIAlertViewクラスを使って表示するには、NSStringオブジェクトに変換する必要があります。

アプリケーションのテスト

 これで完成です。アプリケーションをテストしてみましょう。Xcode内でCommand+Rキーを押し、アプリケーションを2台のiPhoneまたはiPod Touchにデプロイします。この記事の解説は、2台のデバイスがあることを前提としています(iPhoneとiPod Touchのどちらでもかまいません)。このアプリケーションを実行するには、両方のデバイスが最低でもiPhone OS 3.0を搭載している必要があります。

 2台のデバイスにアプリケーションをデプロイしたら、両方のデバイスでアプリケーションを起動します。各デバイスのConnectボタンをタップします。GKPeerPickerControllerにより、他のデバイスを検索するための標準UIが表示されます(図4を参照)。

図4 デバイスの検索: GKPeerPickerControllerにより他のデバイスが検索される
図4 デバイスの検索: GKPeerPickerControllerにより他のデバイスが検索される

 しばらくすると、両方のアプリケーションがお互いを見つけます(図5を参照)。見つかったデバイスの名前をタップすると、アプリケーションがそのデバイスに接続しようとします。

※著者注

 このアプリケーションをiPhone Simulatorでテストした場合、2台のデバイスを検出するところまではできますが、それ以上の動作は確認できません。検出したデバイスに接続することはできません。

図5 デバイス名の表示: 見つかったデバイスの名前が表示される
図5 デバイス名の表示: 見つかったデバイスの名前が表示される

 一方のデバイスに他方のデバイスが接続しようとすると、図6のようなポップアップが表示されます。接続を許可する場合はAcceptボタン、接続を拒否する場合はDeclineボタンをタップします。

図6 接続: リモートデバイスが接続を要求している
図6 接続: リモートデバイスが接続を要求している

 接続が確立すると、テキストを入力して、相手デバイスに送信できる状態になります。相手デバイスから受信したデータはアラートビューに表示されます(図7を参照)。

図7 接続成功: リモートデバイスから送信されたデータを受信できた
図7 接続成功: リモートデバイスから送信されたデータを受信できた

まとめ

 この記事では、Bluetoothを使用すると2台のiPhoneまたはiPod Touchを簡単に接続できることを紹介しました。この考え方を応用すれば、ネットワークゲームや面白いアプリケーションを簡単に作成できます。次回の記事では、このBluetooth接続を利用して音声データを送信する方法を紹介します。では、またお会いしましょう!

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
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、ワイヤレステクノロジーに関す...

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4800 2010/04/19 19:08

イベント

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

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

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

メールバックナンバー