【发布时间】:2021-04-05 03:44:17
【问题描述】:
我有以下代码,一旦我收到 Firebase 推送通知或 FCM,就会将我的 Android 应用程序带到前台。
@ReactMethod
public void backToForeground() {
Context context = getAppContext();
String packageName = context.getApplicationContext().getPackageName();
Intent focusIntent = context.getPackageManager().getLaunchIntentForPackage(packageName).cloneFilter();
Activity activity = getCurrentActivity();
boolean isOpened = activity != null;
if (isOpened) {
focusIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
activity.startActivity(focusIntent);
} else {
// Custom flag to check whether app was started from this method
focusIntent.putExtra("FLAG_ON_CALL_BRING_TO_FRONT", "true");
focusIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK +
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED +
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD +
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
getReactApplicationContext().startActivity(focusIntent);
}
}
现在在 MainActivity 中,我使用了如下捆绑包:
@Override
protected void onCreate(Bundle savedInstanceState) {
SplashScreen.show(this);
super.onCreate(savedInstanceState);
Bundle extras = getIntent().getExtras();
if (extras != null) {
// Custom flag defined in AppStateManagerModule
String extraString = extras.getString("FLAG_ON_CALL_BRING_TO_FRONT");
if (extraString != null) {
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
);
}
}
}
我的代码在以下情况下可以正常工作:
当设备接收到 FCM 时:
- 如果应用已打开,则会执行操作
- 如果应用处于后台(即最小化),应用会打开并执行操作
- 如果应用被终止,应用会打开并执行操作
- 如果应用被终止并且手机被锁定,应用会在锁定屏幕顶部打开,然后执行操作
下面是不能正常工作的情况:
- 如果我在前台启动我的应用程序,或者如果它最小化并锁定我的手机,我的应用程序运行良好并且我的代码将其置于前面,它会执行所需的操作,但它不会显示在锁的顶部屏幕。
第 5 点中的操作执行得很好,但它没有显示在锁定屏幕的顶部。
【问题讨论】:
-
你的意思是即使屏幕被锁定也要显示它?
-
@FaiiziiAwan 是的...如果应用程序被杀死并且屏幕被锁定,它会很好地启动应用程序但是如果没有被杀死但屏幕被锁定,那么它不会启动应用程序锁屏
-
你的通知有两个标签(通知和数据)对吧?
-
是的,正如我所说,上述所有情况都正常工作,除了一个
-
您是否注意到您没有添加自定义标签是您的应用已经在运行?