我正在尝试编写一个实用程序方法,它可以启动标记为“android.intent.action.MAIN”的活动(属于当前应用程序)。实用方法不应接受任何参数。
所需代码:
public void startMainActivity(Context context) {
...
}
清单:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
有什么想法吗?
答案 0 :(得分:14)
这适用于API Level 3(Android 1.5):
private void startMainActivity(Context context) throws NameNotFoundException {
PackageManager pm = context.getPackageManager();
Intent intent = pm.getLaunchIntentForPackage(context.getPackageName());
context.startActivity(intent);
}
答案 1 :(得分:1)
我们使用alex2k8的漂亮解决方案一段时间,直到发现不在所有设备上从Google Play下载的已发布版本 。
不幸的是系统没有:
我们使用以下解决方法来解决它:
protected void startMainActivityWithWorkaround() throws NameNotFoundException, ActivityNotFoundException {
final String packageName = getPackageName();
final Intent launchIntent = getPackageManager().getLaunchIntentForPackage(packageName);
if (launchIntent == null) {
Log.e(LOG_TAG, "Launch intent is null");
} else {
final String mainActivity = launchIntent.getComponent().getClassName();
Log.d(LOG_TAG, String.format("Open activity with package name %s / class name %s", packageName, mainActivity));
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setComponent(new ComponentName(packageName, mainActivity));
// optional: intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
答案 2 :(得分:0)
我认为您必须找到清单中声明的所有活动的列表,然后使用intentFilter的actionsIterator()
来迭代每个活动的intent-filter的所有操作,匹配具有intent.action.MAIN
然后启动该活动。
问题是我不确定如何从清单中检索所有已声明的Activites的列表。