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 的问题,但我想加两分钱:

/** 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);
}

在这里,我不仅获得了应用程序的启动器活动,而且还清除了活动的所有后台堆栈(这是我在触发启动器活动时真正需要的)。例如,在身份验证令牌过期的情况下,我称之为。

重要的是使用IntentCompat,否则必须求助于Intentflag Intent.FLAG_ACTIVITY_CLEAR_TASK,它仅在 API 11 中引入。

于 2013-12-31T12:04:18.720 回答
3

这是您可以使用的最简单的解决方案。而且效果很好。`

private String getLauncherActivityName(){
        String activityName = "";
        final PackageManager pm = getPackageManager();
        Intent intent = pm.getLaunchIntentForPackage(getPackageName());
        List<ResolveInfo> activityList = pm.queryIntentActivities(intent,0);
        if(activityList != null){
            activityName = activityList.get(0).activityInfo.name;
        }
        return activityName;
    }
于 2018-08-27T09:27:49.320 回答