如何使用新任务正确地链接活动?

时间:2015-11-26 16:53:28

标签: android android-intent android-task

我正在报警申请。我有3项活动:MainAlarmGame

它们在清单中声明:

<activity
        android:name=".MainActivity"
        android:windowSoftInputMode="adjustResize"
        android:screenOrientation="sensorPortrait"
        >
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
</activity>
<activity
        android:name=".Alarm"
        android:excludeFromRecents="true"
        android:launchMode="singleTask"
        android:screenOrientation="sensorPortrait"
        />
<activity
        android:name=".Game"
        android:excludeFromRecents="true"
        android:label="@string/search_word"
        android:launchMode="singleTask"
        android:screenOrientation="sensorPortrait"
        />
从broadcastreciever调用

Alarm活动:

Intent i = new Intent(context, NotificationActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

或者来自`Game's onBackPressed:

if (!test) {
     Intent i = new Intent(mContext, NotificationActivity.class);
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     startActivity(i);
}
finish();
以类似的方式从Alarm活动调用

Game活动:

i = new Intent(this, BubblePopActivity.class);
i.putExtras(b);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);

Main活动没有内部电话。

行为我想要实现:

1)活动AlarmGame应该显示在锁定屏幕上,无论是解锁还是用针,grafical图案等锁定。它适用于 在活动中标记十六进制,这需要意图中的FLAG_NEW_TASK

super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
        WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
        WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
        WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
        WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_bgame);

2)后退按钮应从Game活动到Alarm活动 3)如果按下home,而AlarmGame活动位于堆栈顶部,则只要这些活动,启动器图标应重新打开,而不是Main没有完成应用程序逻辑 虽然1)和2)流畅地工作,但3)偶尔起作用。有时它会返回Game Alarm个活动。看起来如果这些活动由于缺乏资源而被系统杀死,启动器图标将导致Main活动。
我如何实现所需的逻辑?

1 个答案:

答案 0 :(得分:0)

我添加了sharede偏好常量。当我启动主要活动时,我会检查用户是否已解除警报,然后正常启动,否则启动警报活动。

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    boolean serviceIsRunning = isMyServiceRunning(AlarmService.class);
    if (serviceIsRunning) {
      boolean alarmRings = RingingAlarmUtil.getRingingAlarm(this).isExpired();
      if (!alarmRings) {
        Intent i = new Intent(this, NotificationActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);
        finish();
      }
    }
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    //normal launch staff
}