マッシュルームの作りかた

  1. マッシュルームとは
  2. リファレンス
  3. 制限
  4. 実装例

1. マッシュルームとは

Simejiのローカルマッシュアップ機能とそれを利用したアプリケーションの総称。

できること

ローカルマッシュアップで自分好みの機能をSimejiに拡張できます。

Simejiとマッシュルームとの関係の概念図

あるアプリケーション(Target App)に対しSimejiを使って日本語入力しているときにマッシュルームを呼出す時の概略です。

①入力中の文字列(OLD_STRING)をSimejiが抜き出します。

②Simejiから、あなたが作ったマッシュルームを起動し、OLD_STRINGを渡します。

(actionとcategoryにより起動アプリをマッシュルームのみに限定しています)

③あなたのマッシュルームがSimejiにNEW_STRINGを渡します。

(OLD_STRINGの利用はマッシュルームの自由です)

④SimejiがTarget AppにNEW_STRINGを入力します。

開発手順

マッシュルームやキャンディーは普通のAndroidアプリです。一般的なAndroidアプリと同様に開発できます。

Simejiから文字列を受け取れる為のintent-filterを追記することでSimejiと連携できます。

マッシュルーム(キャンディー)がする事は、Simejiから文字列を受け取り、Simejiに新たな文字列を渡すだけです。

詳しくは以下のリファレンスをご覧下さい。

2. リファレンス

マッシュルーム

バージョン Simeji2.8.0~
ACTION com.adamrocker.android.simeji.ACTION_INTERCEPT
CATEGORY com.adamrocker.android.simeji.REPLACE
Method Key string
Input Intent.getStringExtra(KEY); replace_key
Output Intent.putExtra(KEY, NEW_STRING); replace_key

Simejiに文字を渡す例

String result = "NEW_STRING"
    Intent data = new Intent();
    data.putExtra("replace_key", result);
    setResult(RESULT_OK, data);
    finish();//マッシュルームを終了してNEW_STRINGをSimejiに渡す

マッシュルーム開発テンプレート

マッシュルームの基本的な部分を作成したテンプレートを公開します。

自由にご利用下さい。

MushroomTemplate.zip

変換候補の文字を送る

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ArrayList<String> list = new ArrayList<String>();
  list.add("こ"); list.add("う"); list.add("ほ");
  JSONArray candidates = new JSONArray(list);
  Intent data = new Intent();
  data.putExtra("candidate_key", candidates.toString());
  setResult(RESULT_OK, data);
  finish();
 }

3. 制限

文字列を置換できるのはActivity内にレイアウトされたandroid.widgetパッケージ以下のテキスト入力を許可するViewのみです。

ブラウザのテキストエリアやWidgetのテキストエリアの文字を置き換える事は出来ません。

4. 実装例

開発テンプレートを例に、実装例をご紹介します。

AndroidManifest.xml

Simejiから呼出されるようにAndroidManifest.xmlを編集して下さい。

<activity android:name=".MushroomActivity" android:icon="@drawable/icon"
        android:label="@string/app_name">
     <intent-filter>
         <action android:name="com.adamrocker.android.simeji.ACTION_INTERCEPT" />
         <category android:name="com.adamrocker.android.simeji.REPLACE" />
         <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
 </activity>

これでSimejiから呼出されるようになりました。

マッシュルーム単体でも動くアプリの場合は、intent-filterにandroid.intent.action.MAINなどを追加して下さい。

<activity android:name=".MushroomActivity" android:icon="@drawable/icon"
             android:label="@string/app_name">
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
 </activity> 
    <activity android:name=".MushroomActivity" android:icon="@drawable/icon"
             android:label="@string/app_name">
     <intent-filter>
         <action android:name="com.adamrocker.android.simeji.ACTION_INTERCEPT" />
         <category android:name="com.adamrocker.android.simeji.REPLACE" />
         <category android:namee="android.intent.category.DEFAULT" />
     </intent-filter>
 </activity>

MushroomActivity.java

マッシュルームアプリの本体です。

Simejiから渡された文字列に対して「You say *** don’t you?」に変換します。

Simejiから渡される文字列は、下線の付いた文字列です。

この例では「シメジ」です。

この例では「シメジ」です。

まずは、文字を受け取る部分。

private static final String ACTION_INTERCEPT = "com.adamrocker.android.simeji.ACTION_INTERCEPT";
private static final String REPLACE_KEY = "replace_key";
@Override
public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     Intent it = getIntent();
     String action = it.getAction();
     if (action != null && ACTION_INTERCEPT.equals(action)) {
     /* Simejiから呼出された時 */
     mReplaceString = it.getStringExtra(REPLACE_KEY);// 置換元の文字を取得
     setContentView(R.layout.mushroom);
     mReplaceBtn = (Button) findViewById(R.id.replace_btn);
     mReplaceBtn.setOnClickListener(this);
     mCancelBtn = (Button) findViewById(R.id.cancel_btn);
     mCancelBtn.setOnClickListener(this);
  } else {
    // Simeji以外から呼出された時
    setContentView(R.layout.main);     } }

画面構成は以下の様になっています。

文字置換とキャンセルボタンを実装します。

 

文字置換とキャンセルボタンを実装します。

public void onClick(View v) {
   String result = null;
   if (v == mReplaceBtn) {
     result = "You say " + mReplaceString + ", don't you?";
   } else if (v == mCancelBtn) {
    result = mReplaceString;
  }
    replace(result);
}

mReplaceBtnがタップされると、Simejiから渡された文字列(mReplaceString)の前後に文字が追加され、

replace()メソッドを呼出します。

Simejiに文字を渡す部分のreplace()は以下のようになっています。

private void replace(String result) {
   Intent data = new Intent();
   data.putExtra(REPLACE_KEY, result);
   setResult(RESULT_OK, data);
   finish();
 }

setResult()で置換対象の文字列を含んだIntentを渡します。

Simejiからの入力も、Simejiへの入力も全てIntentを用いて行います。

そのときのキー文字列はいずれも「replace_key」です。

新しい文字列で置換した結果は以下のようになります。

Last Update:2015.05.1
※掲載されている仕様や画像は現在の仕様とは異なる可能性があります。