【问题标题】:How to properly chain activities with new tasks?如何正确地将活动与新任务联系起来?
【发布时间】:2015-11-26 16:53:27
【问题描述】:

我正在制作警报应用程序。我有 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"
        />

Alarm 活动从广播接收器调用:

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

或者来自`游戏的onBackPressed:

if (!test) {
     Intent i = new Intent(mContext, NotificationActivity.class);
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     startActivity(i);
}
finish();

Game 活动以类似的方式从警报活动中调用:

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

没有对Main活动的内部调用。

我想要达到的行为:

1) 活动AlarmGame 应显示在锁定屏幕上,两者均未锁定和用大头针、涂鸦图案等锁定。它适用于 活动中声明的标志,意图中需要 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) 偶尔工作。有时它应该返回到Alarm 活动的Game。看起来如果这些活动由于缺乏资源而被系统杀死,启动器图标将导致 Main 活动。
如何实现所需的逻辑?

【问题讨论】:

    标签: android android-intent android-task


    【解决方案1】:

    我添加了共享首选项常量。当我启动主要活动时,我检查用户是否解除了警报,然后正常启动,否则启动警报活动。

    @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
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-19
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多