複数の起動アイコンを登録する:Androidアプリケーション開発者のためのTips集(12)
Androidアプリ開発者のためのTips集。通常、アプリケーションをインストールすると一覧画面に起動用アイコンが1つだけ追加されるが、AndroidManifest.xmlの記述によって、複数のアイコンを登録できる。
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の画面遷移が混ざらないようにするためだ。
実際にインストールすると、結果は以下のようになる。
Main Appをタップすると、TestActivity_1が起動する。
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の順で実行すると、以下のようなログが出力される。
≫連載「Androidアプリケーション開発者のためのTips集」の目次
Copyright © ITmedia, Inc. All Rights Reserved.




