2011年2月6日日曜日

マッシュルームアプリとかキャンディアプリを作ってみた

やっぱりAndroidのIMEはシメジですよね~
いつも大変お世話になっております。

ところで最近の和製Android端末なら赤外線モジュール積んでいるんで、アドレス交換とかも楽ですが、
よく考えなくてもDesireさんにはそんなモノありません(´;ω;`)

で、そうするとどうなるか。

  • 昔ながらのメールで連絡先送るね~
になります。

よね?

そう、自分の電話番号をマッシュルームで呼び出せば便利じゃね?

ってことで今更ながら、マッシュルームアプリを作ってみました。


細かい詳細はadamrockerさんのサイトへ

まずは、上記サイトを読んだ上で、作ってくれている「MushroomTemplate」を参考に…というかほぼコピーというか…

public class MyInfo extends Activity {

 private static final String ACTION_INTERCEPT = "com.adamrocker.android.simeji.ACTION_INTERCEPT";
 private static final String REPLACE_KEY = "replace_key";

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Intent it = getIntent();
  String action = it.getAction();
  // Simejiからの呼び出し
  if (action != null && ACTION_INTERCEPT.equals(action)) {
   replace( _getMyTelNum());

   return;
  }
  //setContentView(R.layout.main);
  finish();
 }


 /**
  * 元の文字を置き換える
  * @param result Replacing string
  */
 private void replace(String result) {
  Intent data = new Intent();
  data.putExtra(REPLACE_KEY, result);
  setResult(RESULT_OK, data);
  finish();
 }

 /**
  * 自分の電話番号取得
  * @return 電話番号文字列
  */
 private String _getMyTelNum(){
  TelephonyManager ts = null;
  String returnStr = null;

  // エラーチェックとかはとりあえず無視
  ts = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
  returnStr = ts.getLine1Number();

  return returnStr;
 }

}

もとの文字列を置き換えるもなにも、欲しいのは電話番号だけなので、入力されてきた文字列なんて無視です。(ぉぃ)

ちゃんと作るなら、メソッド内でエラーチェックしたりなんだりしますが、メンドイのでその辺も放置

Androidで自分の電話番号を取得する為にはTelephonyManagerを使うため、マニフェストに
・< uses-permission android:name="android.permission.READ_PHONE_STATE" />
の記述(パーミッションの指定)を忘れずに

とりあえず実際に動かしてみます。

とりあえず何か入力する画面にカーソルを合わせ…



おもむろにシメジボタンを押すと、味気ない標準のアイコンとセンスのないアプリ名Topに出てくるw



とりあえず押して見るとちゃんと電話番号が!



流石にこれだけじゃつまんないので、ついでにキャンディー化してみましょう。

public class MyInfo extends Activity {

 // マッシュルーム
 private static final String ACTION_INTERCEPT = "com.adamrocker.android.simeji.ACTION_INTERCEPT";
 private static final String REPLACE_KEY = "replace_key";

 // キャンディ
 private static final String ACTION_INJECTION = "com.adamrocker.android.simeji.ACTION_INJECTION";
 private static final String CANDITATE_KYE = "candidate_key";

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Intent it = getIntent();
  String action = it.getAction();
  // Simejiからの呼び出し
  if (action != null && ACTION_INTERCEPT.equals(action)) {
   replace( _getMyTelNum());
   return;

  }else if(action != null && ACTION_INJECTION.equals(action)){
   _canditate();
   return;
  }
  //setContentView(R.layout.main);
  finish();
 }

 // 中略

 /**
  * 文字配列の返却
  */
 private void _canditate(){
  ArrayList telnums = null;
  JSONArray jsons = null;
  Intent data = new Intent();
  String myInfo = null;
  String telhead = null;
  String telbody1 = null;
  String telbody2 = null;

  myInfo = _getMyTelNum();

  telhead = myInfo.substring(0, 3);
  telbody1 = myInfo.substring(3, 7);
  telbody2 = myInfo.substring(7, 11);

  telnums = new ArrayList();
  telnums.add(myInfo);
  telnums.add(telhead + "-" + telbody1 + telbody2);
  telnums.add(telhead + "-" + telbody1 + "-" + telbody2);

  jsons = new JSONArray(telnums);
  data.putExtra(CANDITATE_KYE, jsons.toString());

  setResult(RESULT_OK, data);
  finish();//キャンディーを終了して複数の文字をSimejiに渡す
 }

}

上の方のソースにちょっと足して変更しただけ。

あとはマニフェスト上にキャンディ用のインテントフィルタを追加するのを忘れずに

何か入力する画面にカーソルを合わせ…



おもむろに「+」ボタン(「ま」の下)を押すと、さっきと同じアプリ名がTopに出てくる



とりあえず押して見ると今度は変換候補に電話番号が!




とまあ、すごく簡単にIME拡張出来ましたw
これもステキなIMEソフトを無料で提供してくれているadamrockerさんのお陰です。

そしてやっぱりAndroidは面白い。

家でプログラムヤル気になるしね。

どう考えても BREWとかBREWとかBREWとか…は…、家でヤル気になんね~し…

→コンパイル環境も家にはないけど…

0 件のコメント:

コメントを投稿