获取Android应用程序的启动器活动名称

时间:2012-10-23 09:30:05

标签: android android-activity

我需要获取启动器活动的名称才能从我的应用程序启动活动。 任何解决方案

4 个答案:

答案 0 :(得分:52)

迟到但更好的方式是提供启动活动的确切意图

PackageManager pm = getPackageManager();
Intent intent=pm.getLaunchIntentForPackage(pacakgeName);
startActivity(intent);

答案 1 :(得分:23)

使用以下代码获取所有包的启动器活动:

        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);


        }

答案 2 :(得分:12)

尽管上面的答案直接回答了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,否则必须使用Intent标记Intent.FLAG_ACTIVITY_CLEAR_TASK,这仅在API 11中引入。

答案 3 :(得分:0)

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

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;
    }