我需要获取启动器活动的名称才能从我的应用程序启动活动。 任何解决方案
答案 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;
}