28

アプリケーションからアクティビティを起動するには、ランチャーアクティビティの名前を取得する必要があります。任意のソリューション

4

4 に答える 4

61

遅くなりますが、アクティビティを開始する正確な意図を与えるためのより良い方法

PackageManager pm = getPackageManager();
Intent intent=pm.getLaunchIntentForPackage(pacakgeName);
startActivity(intent);
于 2012-11-21T11:56:29.887 に答える
26

次のコードを使用して、すべてのパッケージのランチャー アクティビティを取得します。

        final PackageManager pm = getPackageManager();

        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        List<ResolveInfo> appList = pm.queryIntentActivities(mainIntent, 0);
        Collections.sort(appList, new ResolveInfo.DisplayNameComparator(pm));

        for (ResolveInfo temp : appList) {

            Log.v("my logs", "package and activity name = "
                    + temp.activityInfo.packageName + "    "
                    + temp.activityInfo.name);


        }
于 2012-10-23T09:32:19.893 に答える
17

上記の回答はOPの質問に直接答えていますが、2セントを追加したいと思います。

/** Backwards compatible method that will clear all activities in the stack. */
public void startLauncherActivity(Context context) {
    PackageManager packageManager = context.getPackageManager();
    Intent intent = packageManager.getLaunchIntentForPackage(context.getPackageName());
    ComponentName componentName = intent.getComponent();
    Intent mainIntent = IntentCompat.makeRestartActivityTask(componentName);
    context.startActivity(mainIntent);
}

ここでは、アプリケーションのランチャー アクティビティを取得するだけでなく、アクティビティのすべてのバックスタックをクリアしています (これは、ランチャー アクティビティをトリガーしたときに実際に必要だったものです)。たとえば、認証トークンが期限切れの場合にこれを呼び出します。

重要なことは を使用することです。それ以外の場合は、 API 11 でのみ導入されたflagIntentCompatに頼る必要があります。IntentIntent.FLAG_ACTIVITY_CLEAR_TASK

于 2013-12-31T12:04:18.720 に答える