Android Intent启动应用程序的主活动

17

我正在尝试从BroadcastReceiver内部启动主Activity。我不想提供Activity类名,而是使用Android的操作和类别来确定主Activity。

但似乎不起作用。

发送的代码:

Intent startIntent = new Intent();

startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startIntent.setAction(Intent.ACTION_MAIN);
startIntent.setPackage(context.getPackageName());
startIntent.addCategory(Intent.CATEGORY_LAUNCHER);        
context.startActivity(startIntent);

我遇到了这个错误:

导致原因: android.content.ActivityNotFoundException: 没有可以处理此 Intent 的活动 { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 pkg=com.xyz.abc (具有额外信息) }

有任何想法吗?


为什么您不想通过名称指定实际的主活动? - Austyn Mahoney
2
@Austyn 例如,在库中使用代码。 - Pataar
4个回答

27

从另一个话题复制:

这个方法适用于 API 等级 3(Android 1.5)及以上版本:

private void startMainActivity(Context context) throws NameNotFoundException {
    PackageManager pm = context.getPackageManager();
    Intent intent = pm.getLaunchIntentForPackage(context.getPackageName());
    context.startActivity(intent);
}

这个答案比已批准的答案好多了。 - FrankMonza

11

这不是调用startActivity的正确方式。
尝试使用以下代码:

Intent startIntent = new Intent(context, MainActivity.class);
startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        
context.startActivity(startIntent);

我只有应用程序的上下文而没有MainActivity.class在库项目中。我该如何从库项目启动应用程序的主活动? - Karthick
@Karthick:使用应用程序上下文而不是MainActivity.class没有问题,但是-如果您不使用Intent.FLAG_ACTIVITY_NEW_TASK标志,在这种情况下启动来自应用程序/服务上下文的活动将导致异常,因为需要此标志。 - Tal Kanel
如果我正在使用上下文,我该如何使用?Intent notificationIntent = new Intent(context, (Activity)(PushNotification.mActiveContext)); 出现错误。我需要在以下链接场景中使用它。http://stackoverflow.com/questions/18843118/launch-android-application-from-library-project - Karthick
@Karthick:我看到了你的问题,如果我理解正确的话 - 我提供了一个很好的答案。 - Tal Kanel
Intent startIntent = new Intent(getApplicationContext(), MainActivity.class); startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplicationContext().startActivity(startIntent);意图 startIntent = new Intent(getApplicationContext(), MainActivity.class); startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplicationContext().startActivity(startIntent); - Alexandros Kourtis

2

我曾经尝试通过库活动(library Activity)来启动MainActivity,而这对我起作用了:

Intent startIntent = new Intent();
startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startIntent.setPackage(getApplicationContext().getPackageName());
getApplicationContext().startActivity(startIntent);

请确保在您的库清单中添加该活动!

这是我尝试相同操作时遇到的异常:android.content.ActivityNotFoundException: 找不到处理该Intent的Activity。 - TienLuong

1

虽然现在可能已经太晚了,但这对未来的某个人可能有用。这帮助了我。

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接