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です。
| 種類 | 型 | キー名 |
|---|---|---|
| 文字コード | String | KEY_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)