我的应用的启动器活动称为 LaunchActivity 。在此活动中,我检查用户是否已登录。如果是,则进行网络呼叫以验证用户,如果一切正常,则启动 MainActivity 。如果用户首次运行应用或用户验证失败,则 LoginActivity 会运行。
在LaunchActivity内部,有一个运行适当活动的函数:
private void start(Class<? extends Activity> startActivity) {
Intent intent = new Intent(this, startActivity);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
finish();
startActivity(intent);
}
应用正在接收通知。通知后点击我想打开应用程序或将其置于顶部,如果它是在背景上。
负责通知意图的代码:
Intent intent = new Intent(context, LaunchActivity.class);
intent.putExtra("SHOW_NOTIFICATION_LIST", "");
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent notificationIntent = PendingIntent.getActivity(
context,
0,
intent,
0);
builder.setContentIntent(notificationIntent);
Notification notification = builder.build();
问题在于,点击后我的当前实现,即使MainActivity在后台,也会重新打开LaunchActivity。如果它在背景上,我无法弄清楚如何将待处理的意图重新打开 MainActivity (没有LaunchActivity和valdation)或者当背景上没有活动运行时启动 LaunchActivity (app没有运行)。我会非常感谢任何帮助。
编辑:
清单中的活动声明:
<activity android:name=".activities.LaunchActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activities.MainActivity"
android:launchMode="singleTop"
android:screenOrientation="userPortrait" />
<activity
android:name=".activities.LoginActivity"
android:excludeFromRecents="true"
android:launchMode="singleTop"
android:noHistory="true"
android:screenOrientation="userPortrait"
android:windowSoftInputMode="adjustResize" >
</activity>
答案 0 :(得分:0)
创建一个对三种不同意图做出反应的BroadcastReceiver
ACTION_CREATED
:将flag设置为true ACTION_DESTROYED
:将flag设置为false ACTION_LAUNCH
:如果是国旗,请启动MainActivity
,否则启动LaunchActivity
(flag可以是例如sharedpreferences中的布尔值或静态字段)
MainActivity
中的:
onCreate
中:发送ACTION_CREATED
广播onDestroy
中:发送ACTION_DESTROYED
广播通知应发送ACTION_LAUNCH
广播。
注意:操作可以命名为您想要的任何名称。它们也应该从您的包名开始,因此您不会干扰其他应用程序。
答案 1 :(得分:0)
荒谬行为的原因在于,当您致电LaunchActivity
时,您正在完成start()
private void start(Class<? extends Activity> startActivity) {
....
finish(); // This is the culprit
....
}
从finish()
移除start()
,它将按预期正常工作。
如果由于您的应用行为而无法移除finish()
,请将PendingIntent
更改为启动MainActivity
而不是LaunchActivity
Intent intent = new Intent(context, MainActivity.class);
并在MainActivity's onCreate()
中检查用户是否已登录。如果没有,请将他导航到您的LoginActivity
。