我正在报警申请。我有3项活动: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"
/>
从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)活动Alarm
和Game
应该显示在锁定屏幕上,无论是解锁还是用针,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
,而Alarm
或Game
活动位于堆栈顶部,则只要这些活动,启动器图标应重新打开,而不是Main
没有完成应用程序逻辑
虽然1)和2)流畅地工作,但3)偶尔起作用。有时它会返回Game
Alarm
个活动。看起来如果这些活动由于缺乏资源而被系统杀死,启动器图标将导致Main
活动。
我如何实现所需的逻辑?
答案 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
}