主にandroidとかのメモ

SmartWatch用アプリ「Gtalk Notifier」公開

Google Play(旧androidマーケット)で、Sony「SmartWatch MN2」用アプリ公開しました。

■アプリについて
・スクリーンショット

・機能:
Android標準のGoogle Talk(チャット)でメッセージ受信した事を、SmartWatchで通知してくれるアプリです。
SmartWatch標準のNotification通知機能を利用していますが、バイブレーションしてくれるので端末をポケットに入れていても大丈夫です。

時間の都合で、受信を通知する機能のみです。
(相手の名前(ID)とメッセージ内容表示を、別途やるかもしれませんが、まあ期待しないでください)

・値段:
無料  まだ通知しかしないし

・ダウンロード(Android Market)
https://market.android.com/details?id=net.init0.android.liveware.extension.gtalknotifier
※SmartWatchが無いと動作しないので注意!

・色々と
Gtalkの引っ掛け方を探ってたところ、@8796nさんに色々教えていただき無事完成しました!大感謝!
実際には下記のような登録をServiceのonCreate()で実行。

private static final Uri CONTENT_URI =
    Uri.parse("content://com.google.android.providers.talk/messages");
private static ContentObserver contentObserver;
    :
    :
    :
if (this.contentObserver == null) {
    contentObserver = new ContentObserver(new Handler()) {
        @Override
        public void onChange(boolean selfChange) {
            update();
            super.onChange(selfChange);
        }
    };
    getContentResolver().registerContentObserver(CONTENT_URI, true,contentObserver);
}

更新があったらupdate()で処理をする感じです。内容は省略ですがCursorを使って上記CONTENT_URIを読むとGtalkのデータが取れます。
カラム情報を出して見ると

        final int columncount = result.getColumnCount();
        for(int i=0;i<columncount;i++)
        	System.out.println(result.getColumnName(i));

_id :メッセージID
thread_id :数値
nickname :null
body :実際のメッセージ文面
date :日付(数字)
real_date :日付(数字)
type :0:送信メッセージ 1:受信メッセージ
packet_id  :英数まざったID
err_code :0:エラーなし
err_msg :null(エラー時に入る?)
is_muc :?null
show_ts :?null
consolidation_key :?null

こんな感じ。_idとかdateとかtypeで新規受信メッセージを見分けてます。
_idで見分けようとしたら、連続でメッセージが来ると同じ_idで通知されたり、内容同じ通知が数回来る時があったりとハマリポイントがいろいろ有りました。

あとonDestroyでunregisterContentObserver(contentObserver);してるのですが、
SmartWatch画面上のボタン押すと、onCreate→onDestroyが呼ばれて解除されちゃって、Gtalk受信を検知できなくなるとか。

それならばと、unregisterContentObserver処理消したら、SmartWatch画面上のボタン押すと2重通知されるようになったり(><)
Serviceってよく分からないです。