Android 从FCM启动活动
在我的应用程序中,当收到高优先级FCM消息时,我需要启动活动并打开屏幕。这是一个警报活动,对用户来说非常非常重要。 在大多数Android设备上,代码运行良好。但是,在一些华为或LG设备上,当设备处于打盹模式或在口袋(接近传感器)中时,活动不会启动。行为应该类似于闹钟、电话等。 这是我的密码: FirebaseMessagingService:Android 从FCM启动活动,android,firebase,firebase-cloud-messaging,android-doze,Android,Firebase,Firebase Cloud Messaging,Android Doze,在我的应用程序中,当收到高优先级FCM消息时,我需要启动活动并打开屏幕。这是一个警报活动,对用户来说非常非常重要。 在大多数Android设备上,代码运行良好。但是,在一些华为或LG设备上,当设备处于打盹模式或在口袋(接近传感器)中时,活动不会启动。行为应该类似于闹钟、电话等。 这是我的密码: FirebaseMessagingService: @Override public void onMessageReceived(RemoteMessage remoteMessage) {
@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);
.
.
}
我想在启动活动之前使用,但它已被弃用 我在活动中使用此代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
setShowWhenLocked(true);
setTurnScreenOn(true);
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
if (keyguardManager != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
keyguardManager.requestDismissKeyguard(this, null);
}
} else {
//noinspection deprecation
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
);
}
}
.....
}
要防止我在活动布局中使用的不同设备上出现不同行为,请执行以下操作:
<android.support.design.widget.CoordinatorLayout
....
android:keepScreenOn="true"
>
查看系统是否在LogCat中记录与活动启动失败相关的任何消息。或者,建议用户将你的应用程序添加到电池优化白名单中。电池优化白名单没有帮助。我将尝试获取无法正常工作的设备。此问题由用户报告,在我的调试设备上运行良好。您的代码运行可靠吗?这些问题是安卓N上报告的,所以唯一的区别是在版面资源中使用keepScreenOn属性;设置旋转屏幕(真);方法。我在几个SDK上进行了测试,这些都是Android O提供的方法。在出现问题的Android N上,您使用的是相同的标志。不过,感谢您的回复,我会将其添加到我的代码中,以更好地定位Oreo。