5月 162012
 

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

前回のGtalk Notifier公開の記事はこちら
http://init0.net/wp/archives/373

・機能(無料版との違い)
Gtalkメッセージ受信時に、送信者IDとメッセージ内容が表示されます。

・値段
100JPY

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

・色々と
前回同様、@8796n先生に読み出すURI(~/contacts/[thread_id])教えていただき何とか完成。

final Cursor result_contact =
  this.getContentResolver().query(Uri.parse(
  "content://com.google.android.providers.talk/contacts/"
  +result.getString(result.getColumnIndexOrThrow("thread_id")))
  , null, null, null, null);

カラム情報を出して見ると25カラムありました。
last_unread_message
avatars_data
contact_id
cap
subscriptionType
type
shortcut
mode
username
_id
chats_contact_id
client_type
rejected
subscriptionStatus
contactList
jid_resource
status
nickname
last_message_date
groupchat
provider
qc
account
unsent_composed_message
avatars_hash

中身は全て追えてないですが、今回必要な情報は下記でした。
last_unread_message にメッセージ文面
username に送信者ID(xxx@gmail.com)

前回引っ掛けてた~messages/では
usernameはあったけど入っておらず(null)
bodyはメッセージ文面入っているものの、内容が重複する場合がある
であまり使えませんでした。

たとえば1通目「おはよう」2通目「ございます」と受信すると、
1通目のbody「おはよう」2通目のbody「おはよう[改行]ございます」と入る

同じパターンで受信時に今回の~contacts/で読み出すと、
1通目のlast_unread_message「おはよう」2通目のlast_unread_message「ございます」と入るので、コレがそのまま使えました。

SmartWatch用アプリ「Gtalk Notifier」公開

 Android, 携帯電話  SmartWatch用アプリ「Gtalk Notifier」公開 はコメントを受け付けていません。
5月 072012
 

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ってよく分からないです。