X

アプリの機能ごとにショートカットを作る

今回はAndroidアプリの機能ごとにHOME画面にショートカットを作る方法を説明します。
たとえば家計簿アプリを作った場合には入力モード、表示モード、それぞれのモードごとにショートカットをHOME画面に作ることができるようになります。

このようなショートカットの作成にはcom.android.launcher.action.INSTALL_SHORTCUTインテントをブロードキャスト送信します。

詳細な説明は続きからどうぞ。

INSTALL_SHORTCUTインテントのExtraData

INSTALL_SHORTCUTインテントには以下のExtraDataを設定する必要があります。

EXTRA_SHORTCUT_NAME ショートカットの名前
EXTRA_SHORTCUT_ICON ショートカットのアイコン
EXTRA_SHORTCUT_INTENT ショートカットをタップしたときに発行されるインテント

ポイントはEXTRA_SHORTCUT_INTENTです。
EXTRA_SHORTCUT_INTENTにショートカットがタップされたときにアプリに対して送信するインテントを設定することができます。つまり、作成するショートカットによって設定するEXTRA_SHORTCUT_INTENTを変えることで、呼ばれるアプリの動作を変えることができます。

サンプル

サンプルではアプリ起動時にToastで表示する文字列が異なる2つのショートカットを、アプリのボタンから作成することができます。

// ショートカットインテントを設定したインテントを作る
Intent makeIntent(String shortcutName, Intent shortcutIntent) {
	Intent intent = new Intent();

	// ショートカットインテントを設定
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);

    // ショートカット名を設定
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, shortcutName);

    // アイコン設定
    Parcelable iconResource = Intent.ShortcutIconResource.fromContext(this, R.drawable.icon);
    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);

    // アクションを設定
    intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");

    return intent;
}

public void onClick(View v) {
	if (v.getId() == R.id.shortcut_btn1) {
		// ショートカットインテントを作成
        Intent shortcutIntent=new Intent(Intent.ACTION_VIEW);
        shortcutIntent.setClassName(this, makeShortcut.class.getName());

        // メッセージを設定
        shortcutIntent.putExtra("MESSAGE","THIS IS TEST MESSAGE!!!");

        // 送信
        sendBroadcast(makeIntent("shortcut1", shortcutIntent));
	} else if (v.getId() == R.id.shortcut_btn2) {
		// ショートカットインテントを作成
        Intent shortcutIntent=new Intent(Intent.ACTION_VIEW);
        shortcutIntent.setClassName(this, makeShortcut.class.getName());

        // メッセージを設定
        shortcutIntent.putExtra("MESSAGE","WE ARE TECHBOOSTER!!!");

        // インテント送信
        sendBroadcast(makeIntent("shortcut2", shortcutIntent));
	}
}

ショートカットから呼び出された際にはインテントに設定されているMESSAGE文字列を取得してToastに表示させるようにします。

@Override
public void onCreate(Bundle savedInstanceState) {
(...略...)
    // 受信したインテントからメッセージを取得
    Intent intent = getIntent();
    String msg = intent.getStringExtra("MESSAGE");

    // メッセージをToastで表示
    if (msg != null)
    	Toast.makeText(this, ""+msg, Toast.LENGTH_LONG).show();
}

ボタンを押すとショートカットを作成したことを知らせるToastが表示されます。
作成された2つのショートカットをHOME画面からタップするとそれぞれ異なるメッセージが表示されます。


なお、サンプルプログラムは下記より入手することができます。
http://techbooster.googlecode.com/svn/trunk/makeShortcut/

kseto: