シナリオは次のとおりです。
ユーザーは Activity#1 を使用して (Android サービスを使用して) アラームをスケジュールし、
AlarmManager
ホーム画面に戻ります。Activity#1 はスタックに残ります。AlarmReciever
onReceived()
は計画どおりに呼び出されます:@Override public void onReceive(Context context, Intent intent){ Intent intent = new Intent(context ,Activity2.class); intent.setFlags( Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY ); context.startActivity(intent); }
Activity#2 (
Activity2
) が正常に開始されました。public class Activity2 extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout_2); 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 ); } @Override protected void onResume() { super.onResume(); findViewById(R.id.dismiss_button).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { finish(); } } ); }
}
ユーザーはボタン (
R.id.dismiss_button
) をクリックしてfinish()
アクティビティ #2 に進みます。- システムは期待どおりにホームスクリーンに戻りますが、Activity#2 はスタックに残ります(ユーザーがRecent Buttonをクリックすると表示されます) 。
Intent.FLAG_ACTIVITY_NO_HISTORY
インテントのフラグを設定することに加えて、フラグも指定されていることに注意してくださいAndroidManifest.xml
(そして、それぞれを別々に試しました):
<activity
android:name=".Activity2"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
android:launchMode= "singleInstance"
android:noHistory="true"
>
</activity>
Intent.FLAG_ACTIVITY_NEW_TASK
また、 Activity#2 がAlarmReceiver
別のアクティビティではなく、別のアクティビティから開始されるため、フラグが必要です。