В моем приложении мне нужно запустить действие и включить экран, когда получено высокоприоритетное сообщение FCM. Это тревожная активность, которая очень и очень важна для пользователей. На большинстве устройств Android код работает нормально. Однако на некоторых устройствах Huawei или LG активность не запускается, когда устройство находится в режиме ожидания или в кармане (датчик приближения). Поведение должно быть похоже на будильники, звонки и т. д. Вот мой код:
Служба FirebaseMessaging:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Intent dialogIntent = new Intent(getBaseContext(), AlarmActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
dialogIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
getApplication().startActivity(dialogIntent);
}
Тревожная активность:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set flags so an activity fire on the screen
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
);
setContentView(R.layout.activity_alarm);
.
.
}
Я хотел использовать SCREEN_BRIGHT_WAKE_LOCK перед запуском действия, но это устарело.