IGTalkSessionをもっと便利に簡単に使えるクラス
GTalkSessionというGTalkを簡単に使えるクラスを作成しました。
GTalkSessionクラスはIGTalkSessionオブジェクトを生成して管理してくれます。
通常IGTalkSessionを使うとこんな感じの実装になると思います。
public class SampleActivity extends Activity implements View.OnClickListener { private IGTalkSession gtalkSession; ServiceConnection conn = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { try { gtalkSession = IGTalkService.Stub.asInterface(service).getDefaultSession(); } catch (DeadObjectException ex) { // } } public void onServiceDisconnected(ComponentName className) { gtalkSession = null; } } public void onCreate(Bundle icicle) { setContentView(R.layout.sample); Button button = (Button)findViewById(R.id.button); button.setOnClickListener(this); bindService(new Intent().setComponent( GTalkServiceConstants.GTALK_SERVICE_COMPONE­NT), conn, 0); } public void onClick(View v) { try { gtalkSession.sendDataMessage("xxx@gmail.com", new Intent().putExtra("message", "Hello!")); } catch (DeadObjectException ex) { // } } }
ServiceConnectionのオブジェクトをいちいち作ってさらにIGTalkSessionオブジェクトのメソッドを呼ぶときはtry〜catchしなきゃいけないしなんとなく使い勝手悪いですね。
GTalkSessionクラスを使うと少し楽になります。
こんな感じです。
public class SampleActivity extends Activity implements View.OnClickListener { private GTalkSession gtalkSession; public void onCreate(Bundle icicle) { setContentView(R.layout.sample); Button button = (Button)findViewById(R.id.button); button.setOnClickListener(this); gtalkSession = new GTalkSession(this); gtalkSession.bindService(); } public void onClick(View v) { gtalkSession.sendDataMessage("xxx@gmail.com", new Intent().putExtra("message", "Hello!")); } }
ちなみにGTalkSessionクラスの実装はこんな感じになってます。
public class GTalkSession implements ServiceConnection { : public GTalkSession(Context context) { : } private IGTalkSession gtalkSession; public void onServiceConnected(ComponentName className, IBinder service) { try { gtalkSession = IGTalkService.Stub.asInterface(service).getDefaultSession(); gtalkSession.requestRoster(); gtalkSession.setPresence(new Presence(5, "")); } catch (DeadObjectException ex) { // } } public void onServiceDisconnected(ComponentName className) { gtalkSession = null; } public void sendDataMessage(String userName, Intent intent) { try { gtalkSession.sendDataMessage(userName, intent); } catch (DeadObjectException ex) { // } } public String getUserName() { try { return gtalkSession.getUserName(); } catch (DeadObjectException ex) { // } return null; } : その他IGTalkSessionのメソッドをラップ : }
GTalkSessionクラスは他にもイベントリスナーを登録できるようになっています。
イベントリスナーはサービス接続の完了を通知したりグループチャットの招待がきたら通知してくれたりします。
ソースはhttp://code.google.com/p/perfume/で公開しています。
GTalkSessionクラスはMame TalkとCommunication Mapでも使用しています。