2011年7月12日火曜日

外部のActivityを明示的Intentで開始するやりかたの要点だけ

Androidアプリの開発で、パッケージ名およびActivity名が分かっているアプリを、自分のアプリから起動したい時がある。たとえばプリインストールのGoogle製アプリとか。

この場合も、自パッケージ内の明示的インテントと同様に起動することができる。具体的には以下みたいにする。

Intent i = new Intent();
i.setAction(Intent.ACTION_MAIN);
i.setClassName("com.example.external.package", "com.example.external.package.SomeActivity");
//i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //外部Activityを自分のActivityスタックとは別に立てたいとき。
startActivity(i);

注意点として、setClassName(String packageName, String ActivityName)するときに、ActivityName側もフルパッケージ名で指定する必要があること。これをしないとClassNotFoundExceptionになる。

あと、setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)しないと、例えば起動したアプリをHOMEボタンで終了した後にもう一回自分のアプリを立ち上げた時、自分のパッケージから起動したSomeActivityの方の画面が出てよくわからない事になる。これを避けるにはIntent.FLAG_ACTIVITY_NEW_TASKフラグを指定した状態でstartActivity()する。

このへんはTASKについて整理する必要がありそうだけど、別の機会にします。

0 件のコメント:

コメントを投稿