A Day In The Life

とあるプログラマの備忘録

XMPPのテキストメッセージを監視する

XMPPのテキストメッセージはIntentReceiverで受けることが出来ません。

これがかなり痛いので自前でテキストメッセージが送られてきたか監視するサービスを作成してみました。

public class MessageWatcher extends Service {
  private ContentObserver observer;
    @Override
    public IBinder getBinder() {	
      return null;
    }
    @Override
    protected void onStart(int startId, Bundle arguments) {
      super.onStart(startId, arguments);
      observer = new ContentObserver(new Handler()) {
	@Override
	public void onChange(boolean selfChange) {
	  super.onChange(selfChange);
	  NotificationManager nm = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
	  nm.notifyWithText(123,"メッセージが届きました。",
	                    NotificationManager.LENGTH_SHORT, null);
	}
      };
      getContentResolver().registerContentObserver(
          Im.Messages.CONTENT_URI, true, observer);
    }
    @Override
    protected void onDestroy() {
      super.onDestroy();
      getContentResolver().unregisterContentObserver(observer);
    }
}

これでGoogleTalkクライアントからメッセージが送られてきたことを検知することができます。

ただし誰からどんなメッセージが来たかまったくわからないという致命的問題があるのであんまり使えないと思います。