Androidアプリ開発者のためのTips集。通常、アプリケーションをインストールすると一覧画面に起動用アイコンが1つだけ追加されるが、AndroidManifest.xmlの記述によって、複数のアイコンを登録できる。
用途 | 便利 |
---|---|
カテゴリ | その他 |
レベル | 初級 |
動作確認環境 | Android 2.3.3(GingerBread) エミュレータにて動作確認 |
備考 | 今回のTipsは上記環境で動作確認・検証を行っています |
通常、アプリケーションをインストールすると一覧画面に起動用のアイコンが1つだけ追加されるが、AndroidManifest.xmlの記述によって、複数のアイコンを登録することもできる。
この方法を使うと、例えば開発中のアプリにデバッグ用画面を追加したい時などに、元のアプリケーションのUI(User Interface)を一切変更せずに専用の画面を追加することができる。
手順は非常に簡単で、AndroidManifest.xmlにActivityの記述をする際、起動アイコンを表示したいActivityのactionを“MAIN”とし、categoryを“LAUNCHER”とするだけだ。
以下、「Main App」「Sub App」という名称の2つの起動アイコンを登録する場合のAndroidManifest.xmlの記述例を示す。
<?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 の実装 */ 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 の実装 */ 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.