我需要获取启动器活动的名称才能从我的应用程序启动活动。任何解决方案
问问题
28377 次
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
,否则必须求助于Intent
flag 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 回答