画面がロックされている場合でも、デバイスでアクティビティを開始する方法。以下のように試しましたが、機能しません。
放送受信機:
Intent alarmIntent = new Intent("Android.intent.action.MAIN");
alarmIntent.setClass(context, Alarm.class);
alarmIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmIntent.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED +
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD +
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON +
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
context.startActivity(alarmIntent);
これは2つの方法で実現できます。
この投稿の@Yupで説明されているように、ウェイクロックを使用します。
ウィンドウフラグを使用します。
ウィンドウフラグの使用:
開始するアクティビティAをonReceive(...)
で開きます。これをそのアクティビティAのonCreate()
に貼り付けます
_final Window win= getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
_
setContentView(...)
の前に貼り付けていないことを確認してください:-)
これを、画面がロックされているときに開きたいアクティビティのonCreateメソッドに貼り付けますsetContentView()の後
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);