2012年6月12日火曜日

アプリをランチャーのActivityで起動する方法

パッケージ名およびクラス名を指定した時、ランチャーとなるActivityでアプリを
起動させる方法をメモしておく。

基本的にはgetLaunchIntentForPackage()で取得したインテントをstartActivity()に
渡すだけなのだが、同じパッケージ名でも複数候補が存在する場合がある。
その時クラス名には"com.android.internal.app.ResolverActivity"が設定されるので、
指定したクラス名で起動するようにする。それ以外は取得したクラス名で起動する。

public void startLaunchActivity(String packageName, String className){
    // CATEGORY_INFOおよびCATEGORY_LAUNCHERのインテント取得
    Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
    String launchClassName = className;

    if(intent != null){
        ComponentName componentName = intent.getComponent();

        // クラス名がResolverActivity以外ならば取得したクラス名を設定
        if(!componentName.getClassName().equals("com.android.internal.app.ResolverActivity")){
            launchClassName = componentName.getClassName();
        }
    }

    intent = new Intent(Intent.ACTION_MAIN);
    intent.setCategory(Intent.CATEGORY_LAUNCHER);
    intent.setClassName(packageName, launchClassName);

    try{
        startActivity(intent);
    } catch(ActivityNotFoundException e){
        // エラーメッセージ出力など
    }
}

0 件のコメント:

コメントを投稿