当前位置: 首页 > 知识库问答 >
问题:

Android通过Firebase通知将应用程序推向前台

公孙宸
2023-03-14

我有以下代码,一旦我收到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时:

  1. 如果应用程序打开,则执行操作
  2. 如果应用程序在后台,即最小化,则应用程序打开并执行操作
  3. 如果应用程序被杀死,应用程序将打开并执行操作
  4. 如果应用程序被杀死并且手机被锁定,应用程序会在锁屏顶部打开,然后执行操作

现在有一个不正常工作的案例:

动作在第5点执行得很好,但它不会显示在锁屏顶部。

共有1个答案

萧德馨
2023-03-14

如果应用程序处于活动状态或在后台,在手机被锁定后,它仍将被视为活动状态。因此,由于活动处于活动状态,因此不能故意将其抛到顶部,因为它已经用于激活活动。

我们需要在活动活动上添加窗口标志,以将其放在前面,如下所示:

 if (isOpened) {

    focusIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

    activity.startActivity(focusIntent);

    // Adding Window Flags to bring app forward on lock screen

    activity.runOnUiThread(new Runnable() {

        @Override
        public void run() {

            activity.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
                    );
                    
        }
    });

}
 类似资料:
  • 我正在我的应用程序中实施第三部分服务(FreshChat,一种允许您将帮助台集成到应用程序或网站中的服务),除了聊天的推送通知之外,一切都很好。Freshchat通过Firebase工作(Firebase推送通知不会出现问题),但Fresat通知不起作用。我遵循了newchat的官方留档,但有已弃用的方法,绝对不起作用(我尝试了很多) 这是Firebase云消息传递代码: 以及FreshChat文

  • 当应用程序在后台时,如何更新包含数据负载的Firebase推送通知?有没有办法在通知中指定通知id给Firebase API? 完整的项目在github https://github.com/akshatashan/FireBaseCloudMessagingDemo中

  • 这是苹果公司设计的吗?或者我错过了一些我可以申请的设置?

  • 这是舱单 这是我的注册令牌类 这是我的Firebase服务类

  • 我通过FCM实现了推送通知。当应用程序从我的服务器获得一个新的通知时,通知面板会被我在notificationcompat.builder中设置的图标所注意,但消息不会作为弹出预览。我尝试设置优先级,样式,类别,但通知仍然没有显示。当我滚动时,我可以看到通知。 我在两种不同的设备操作系统(6.0.1和5.0.1)上尝试了这个应用程序,也是我的后端C#解决方案--两种方法都不弹出通知消息和通知 Fi

  • 你知道如何从PHP向IOS应用程序发送推送通知吗? 这是某人的最佳答案http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1 但它不起作用: