2010年5月18日火曜日

マッシュルームアプリ作ってみた

フリック入力目当てで、Simejiを愛用しているんですが、以前使っていたSO905iとは変換がかなり違うので、戸惑うことが結構あった。

とくに困ったのが、SO905iだとひらがな入力中にあ段(例:あかさ)の文字をいくつか入力して変換すると対応するテンキーの数字(例:123)に変換されるってのがあったけど、これがSimejiだと入力切り替えしないとできない(はず)。

このSimejiにはマッシュルームという仕組みがあって、お手軽に自分のアプリとSimejiとでマッシュアップ(Simejiで入力→自作アプリで変換→Simejiで表示)ができちゃうらしい。ということで、早速つくってみました。

アプリ名:Num Converter

  • 仕様
    • あ段(あ、か、さ、・・・)の文字を入力して、マッシュルーム呼出から、Num Converterを呼びだすと対応するテンキーの半角数字(1、2、3、・・・)に変換されます。
    • あ段のひらがな以外は、そのまま入力された文字を表示します。
  • スクリーンショット
    1. あ段(あ、か、さ、・・・)の文字して、マッシュルームをボタンを長押しする。
      nt001
    2. マッシュルーム一覧で、Num Converterをタップする。
       nt002
    3. 入力した文字が対応するテンキーの半角数字に変換されて出力されます。
      nt003
  • ダウンロード(※動作確認はXperiaだけしかしてません)

2010年5月16日日曜日

AndroidでDesktop Notificatin

ちょっと前に書いたDesktop Notificatinが、Androidのブラウザでは動作しなくて悔しかったので、Android版Desktop Notificatinを無理やり実装してみた。

といっても、ブラウザに手を入れるのは無理くさいので、ブラウザから呼び出すAndroid専用Desktop Notificatin API(以下aNotificatin.js)と、そのAPIからIntentを使って呼び出されるAndroidアプリ(以下NotifyReceiver)の組み合わせで実装してみた。

[動作している絵]

  1. Desktop Notificatin APIを使ったページにaNotificatin.jsを使うように改造を施す(10行くらい)。
  2. 上記のページをAndroidのブラウザで表示して、通知許可を実行。
    001
  3. 通知許可のダイアログがでるので、OKボタンを押す。
    002
  4. 通知ボタンを押すと、NotifyReceiverが起動して通知が行われる(画面左上のアイコン)。
    003
  5. 通知の詳細を見ると、アイコン、タイトル、本文、ソースなどが通知元で指定したものどおりになっている。
    004
  6. もちろんPC上のChromeで同じページを表示すれば、ちゃんと通知が出せます。
    005

[できているとこ]

  • createHTMLNotification以外のAPIは(できはともかく)用意できた。

[できてないとこ]

  • aNotificatin.js
    • Permission周りはcookieで無理やり実装したのであやしいです。
    • createHTMLNotificationはサポートしていません。
    • Notificationのevent handler(onXXX)はサポートしません。
    • jquery.cookie.jsに依存しているので、使うとき面倒。
  • NotifyReceiver
    • アプリ起ち上げ時に何もないウィンドウが表示されます。
    • 複数の通知を受け取った場合、一番後の通知以外は消えます。
    • 長い本文付きの通知だと表示がとぎれます。

2010年5月7日金曜日

クリックしても何も反応しないNotificationの作り方

初心者が自作Androidアプリを作ってた時に調べたことのメモ

Notification(画面の上にアイコンが出るやつ)をクリックされたときに通知元アプリの画面に遷移させたくない場合、下記のソースのようにgetActivity()呼び出し時に空のIntentを引数に指定すると、クリックしても何も反応しないようになる(Xperia X10のエミュレータで動作確認)。

NotificationManager manager =
(NotificationManager) getSystemService(
Context.NOTIFICATION_SERVICE);
Notification notification =
new Notification(
R.drawable.icon, "",
System.currentTimeMillis());
PendingIntent contentIntent =
PendingIntent.getActivity(
this, 0, /**/new Intent()/**/, 0);
notification.setLatestEventInfo(
this, "title", "text", contentIntent);
manager.notify(R.string.hello, notification);