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

获取android应用程序的启动器活动名称,android,android-activity,Android,Android Activity,我需要获取启动器活动的名称才能从我的应用程序中启动该活动。 任何解决方案使用以下代码获取所有包的启动器活动: final PackageManager pm = getPackageManager(); Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); List&l

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

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

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


        }
final PackageManager pm=getPackageManager();
意图maintent=新意图(Intent.ACTION\u MAIN,空);
mainIntent.addCategory(Intent.CATEGORY_启动器);
List appList=pm.querytentActivities(maintent,0);
Collections.sort(appList,newresolveinfo.DisplayNameComparator(pm));
用于(ResolveInfo临时:应用程序列表){
Log.v(“我的日志”,“包和活动名称=”
+temp.activityInfo.packageName+“”
+临时活动信息(名称);
}

虽然晚了,但更好的方法是它能给出启动活动的确切意图

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

尽管上面的答案直接回答了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);
}
在这里,我不仅获得了应用程序的启动程序活动,而且还清除了所有活动的backbackback(这是我触发启动程序活动时实际需要的)。例如,我将其称为过期的身份验证令牌


重要的是要使用
IntentCompat
,否则必须使用
Intent
标志,该标志仅在API 11中引入。

这是您可以使用的最简单的解决方案。而且它工作得很好`

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;
    }
私有字符串getLauncherActivityName(){
字符串activityName=“”;
最终PackageManager pm=getPackageManager();
Intent-Intent=pm.getLaunchIntentForPackage(getPackageName());
List activityList=pm.querytentActivities(intent,0);
如果(activityList!=null){
activityName=activityList.get(0).activityInfo.name;
}
返回activityName;
}

ComponentName=新组件名称(包、启动器活动);意向i=新意向(意向.行动\主要);i、 addCategory(意图.类别\发射器);i、 setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_,如果需要);i、 设置组件(名称)_背景。起始触觉(i);这里我想要ComponentName的launcheractivity的名称..看一下,它列出了所有已安装应用程序所需的信息。任何特定应用程序或所有已安装应用程序的启动程序活动?已安装应用程序的启动程序活动如果您输入了软件包名称,那么为什么不直接尝试我的代码。您的2美分非常有用:)Google已删除了方法
IntentCompat.makeRestartActivityTask()
,使用
Intent.makeRestartActivityTask()
insteadAdd
Intent
flag
Intent.flag\u ACTIVITY\u CLEAR\u TASK
清除后台堆栈。