« 2009年08月20日 | メイン | 2009年08月31日 »

2009年08月24日 アーカイブ

2009年08月24日

IMoNi 1.0.0

 IMoNi(旧:芋煮)に数多くのコメントとご要望を頂きありがとうございます。頂いたご要望については全て記録しています。できるものから少しずつ対応していきたいと考えています。頂いているご要望全てを実現できているわけではありませんが、主要な機能はだいたい実装し終えたと判断し、今回のリリースで1.0.0にすることにしました。

・絵文字を入力する画面「Emoji Picker」の本格導入
・メールを作成する画面の「送信」ボタンと「下書き」ボタンの位置を逆に
・本文を表示する画面の文字色を白に
・本文スクロール時にタップしても文字が暗くならないように
・新着メールをステータスバーへ通知する際に、送信者が連絡先に登録されていればその氏名を表示するように
・その他、細かな調整や修正

以降で、絵文字を入力する仕組み「Emoji Picker」について説明します。


1. 絵文字入りメールの作成

メールを作成する画面を開き、メニューから「絵文字を入力」を選択すると、絵文字を入力する画面が開きます。これを「Emoji Picker」と呼びます。

ボタンの下に

・選択した絵文字
・最近使った絵文字(5つ)
・選べる絵文字全ての候補

の順で並んでいます。

絵文字は連続入力することができます。「入力した絵文字を反映」ボタンを押すと元の画面に戻り、それまでに選択した絵文字たちがフォーカスがあたっていたテキスト入力エリアに渡されます。




2. simejiとの連携(mashroom)

Emoji Pickerは、IMoNiの外からも利用することができます。まずはsimejiとの連携です。試しにGmailアプリのメール作成画面を表示している状態でsimejiの「マッシュルーム」ボタンを押します。



「Emoji Picker」を選択します。



Emoji Pickerが開きますので、IMoNiで絵文字を入力するときと同じように絵文字を選択します。Gmailの画面に戻ってくると、絵文字が四角い文字として表示されています。読むことはできないのでちょっと微妙ですが、絵文字のコードは確かに入力されていますので、このまま送ることができます。




ただし、(少なくとも現時点の)Emoji Pickerが送れるのはDoCoMoの絵文字の文字コードだけです。DoCoMo以外のキャリアに送っても正しく表示はしてくれないでしょう。なおPC版のGmailでは、送信時に各キャリアに合わせた文字コードに変換して送ってくれているようです。


3. 他のアプリとのマッシュアップによる連携

Emoji Pickerと連携できるのはsimejiだけではありません。例えば、あなたが今開発されているアプリからEmoji Pickerを使うこともできます。Emoji Pickerとの連携は、Intentを使います。

・Emoji Pickerを呼び出すIntentの設定項目

アクションnet.grandnature.android.emojipicker.ACTION_PICK_EMOJI
カテゴリnet.grandnature.android.emojipicker.CATRGORY_DOCOMO_DEFAULT

・コード例

final String ACTION = "net.grandnature.android.emojipicker.ACTION_PICK_EMOJI";
final String CATEGORY = "net.grandnature.android.emojipicker.CATRGORY_DOCOMO_DEFAULT";
・・・
Intent i = new Intent(ACTION);
i.addCategory(CATEGORY);
startActivityForResult(i, 1);

これでEmoji Pickerを呼び出すことができます。Emoji Pickerで選択された絵文字は、文字コードと画像データに分けてIntentに詰められて返ってきますので、その内容を取得すればOKです。

種類キー名
文字コードStringKEY_PICKED_EMOJI_CHAR_CODES
画像データList<byte[]>KEY_PICKED_EMOJI_ICONS

KEY_PICKED_EMOJI_CHAR_CODESには、入力された絵文字の文字コードが順番に入っています。KEY_PICKED_EMOJI_ICONSには、入力された絵文字の画像データ(byte配列)が順番に入っています。例えば、Emoji Pickerを呼び出したアクティビティのonActivityResultメソッドで、以下のように記述すれば取得することができます。

final String KEY_PICKED_EMOJI_ICONS = "KEY_PICKED_EMOJI_ICONS";
final String KEY_PICKED_EMOJI_CHAR_CODES = "KEY_PICKED_EMOJI_CHAR_CODES";
・・・
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if(resultCode == RESULT_OK) {
    List<byte[]> icons = (List<byte[]>) data.getSerializableExtra(KEY_PICKED_EMOJI_ICONS);
    String charCodes = data.getStringExtra(KEY_PICKED_EMOJI_CHAR_CODES);
    int len = charCodes.length();
    for (int i = 0; i < len; i++) {
      InputStream in = new ByteArrayInputStream(icons.get(i));
      // i番目の絵文字の画像
      Drawable image = new BitmapDrawable(in);
      // i番目の絵文字の文字コード
      char code = charCodes.charAt(i);
      ・・・
    }
  }
}

Emoji Pickerを利用している簡単なサンプルプログラム(HelloEmoji)を作ってみました。UIはかなり手抜きですが、受け渡しの仕組みはつかんでもらえるかと思います。

・「絵文字を選択」ボタンを押すと、Emoji Pickerを呼び出します。
・Emoji Pickerから戻ってくると、Emoji Pickerで選択された絵文字の画像を表示します。
・絵文字の画像にタッチすると、その絵文字の文字コードを表示します。

このサンプルのEclipseのプロジェクトをそのまま圧縮して置いておきます。(HelloEmoji.zip

About 2009年08月

2009年08月にブログ「GrandNature」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2009年08月20日です。

次のアーカイブは2009年08月31日です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。