Android 如何正确地将活动与新任务联系起来?
我正在申请报警。我有3个活动:Android 如何正确地将活动与新任务联系起来?,android,android-intent,android-task,Android,Android Intent,Android Task,我正在申请报警。我有3个活动:Main,Alarm,Game 它们在舱单中声明: <activity android:name=".MainActivity" android:windowSoftInputMode="adjustResize" android:screenOrientation="sensorPortrait" > <intent-filter> &l
Main
,Alarm
,Game
它们在舱单中声明:
<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"
/>
或者从“游戏的背面”开始:
if (!test) {
Intent i = new Intent(mContext, NotificationActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
finish();
游戏
活动以类似方式从报警活动调用:
i = new Intent(this, BubblePopActivity.class);
i.putExtras(b);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
没有对Main
活动的内部调用
@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
}
我努力实现的行为:
1) 活动警报
和游戏
应显示在锁屏上,既可以解锁,也可以用pin、图形等锁定。它与
活动中减少的标志,需要在意图中标记新任务
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) 后退按钮应从游戏
活动引导至报警
活动
3) 如果按下主页
,而报警
或游戏
活动位于堆栈顶部,则只要这些活动未通过应用程序逻辑完成,启动器图标应重新打开它们,而非主。1)和2)工作流畅,3)偶尔工作。有时它会返回到
报警活动的游戏。看起来,如果这些活动由于缺乏资源而被系统终止,则启动器图标将导致Main
活动。
如何实现所需的逻辑?我添加了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
}