連載
» 2012年03月29日 10時38分 UPDATE

Android Tips(12):複数の起動アイコンを登録する

Androidアプリ開発者のためのTips集。通常、アプリケーションをインストールすると一覧画面に起動用アイコンが1つだけ追加されるが、AndroidManifest.xmlの記述によって、複数のアイコンを登録できる。

[秋本耕平(イーフロー),@IT MONOist]
Android Tips

Tips概要と動作検証環境

用途 便利
カテゴリ その他
レベル 初級
動作確認環境 Android 2.3.3(GingerBread) エミュレータにて動作確認
備考 今回のTipsは上記環境で動作確認・検証を行っています


Tips 12:複数の起動アイコンを登録する

 通常、アプリケーションをインストールすると一覧画面に起動用のアイコンが1つだけ追加されるが、AndroidManifest.xmlの記述によって、複数のアイコンを登録することもできる。

 この方法を使うと、例えば開発中のアプリにデバッグ用画面を追加したい時などに、元のアプリケーションのUI(User Interface)を一切変更せずに専用の画面を追加することができる。

AndroidManifest.xmlの記述内容

 手順は非常に簡単で、AndroidManifest.xmlにActivityの記述をする際、起動アイコンを表示したいActivityのactionを“MAIN”とし、categoryを“LAUNCHER”とするだけだ。

 以下、「Main App」「Sub App」という名称の2つの起動アイコンを登録する場合のAndroidManifest.xmlの記述例を示す。

例:2つのアイコンをアプリケーション一覧に登録する

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="jp.test.multi.app"
        android:versionCode="1"
        android:versionName="1.0" >
 
        <uses-sdk android:minSdkVersion="10" />
 
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name_1" >
            <activity
                android:label="Main App"
                android:name=".TestActivity_1"
                android:launchMode="singleTask" >
                <intent-filter >
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
 
            <activity
                android:label="Sub App"
                android:name=".TestActivity_2"
                android:launchMode="singleTask" >
                <intent-filter >
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
 
    </manifest>


 少し注意が必要な点としては、この例ではそれぞれのActivityに「android:launchMode="singleTask"」を設定している。これは、Main AppとSub Appの画面遷移が混ざらないようにするためだ。

 実際にインストールすると、結果は以下のようになる。

2つのアイコンをアプリケーション一覧に登録する 画像1 実行結果(1):2つのアイコンをアプリケーション一覧に登録する

 Main Appをタップすると、TestActivity_1が起動する。

Main Appをタップしたところ。TestActivity_1が起動 画像2 実行結果(2):Main Appをタップしたところ。TestActivity_1が起動

 Sub Appをタップすると、TestActivity_2が起動する。

Sub Appをタップしたところ。TestActivity_2が起動 画像3 実行結果(3):Sub Appをタップしたところ。TestActivity_2が起動

その他

 先のサンプルで示したMain AppとSub Appは、同じアプリケーションパッケージに入っているので、staticメンバーを利用すると相互に情報をやりとりできる。これはデバッグ画面を作るのに便利だ。

 簡単な例として、Main Appで設定したランダムな値をSub Appで読み取ってみる。

例:Main Appでランダムな値を生成

    /** Main App の実装 */
    public class TestActivity_1 extends Activity {
 
        // ランダムな値を格納する static フィールド
        static int ID;
 
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
 
            // static フィールドに、ランダムな値を格納。
            ID = new Random().nextInt();
            Log.d("Main App","random ID[" + ID + "]" );
        }
    }


例:Sub AppでMain App の値を読み取る

    /** Sub App の実装 */
    public class TestActivity_2 extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main2);
 
            // Main App の static フィールドにアクセスする //
            Log.d("Sub App","random ID[" + TestActivity_1.ID + "]" );
        }
    }


 Main App、Sub Appの順で実行すると、以下のようなログが出力される。

Sub AppでMain App の値を読み取る 画像4 実行結果:Sub AppでMain App の値を読み取る

Android コーナー

Androidコーナー
「Android(アンドロイド)」の組み込み機器への適用からアプリ開発、レポート、ニュースなどさまざまな技術情報・最新動向をお届けする!!

>>コーナーTOPはこちらから


Copyright© 2017 ITmedia, Inc. All Rights Reserved.