Android 有没有办法在收到推送通知时将应用程序置于前台?

Android 有没有办法在收到推送通知时将应用程序置于前台?,android,firebase,android-activity,push-notification,state,Android,Firebase,Android Activity,Push Notification,State,例如WhatsApp。当我给某人打电话时,即使应用程序处于后台或已被终止,活动也会打开。如何实现相同的功能?此外,我不希望我的应用程序启动新活动,因为此应用程序将在受控环境中使用。我的应用程序将始终处于后台。当应用程序打开时(后台或前台),用户将收到通知,因此当用户收到此通知时,他们的应用程序应自动应用(而不是启动新活动),但只将当前活动推到前台 为了更好地理解这一点,我正在尝试实施: 用户A打开应用程序,然后将其最小化。因此,现在他有资格接收通知。应用程序当前在活动A上。当用户收到通知时,我们

例如WhatsApp。当我给某人打电话时,即使应用程序处于后台或已被终止,活动也会打开。如何实现相同的功能?此外,我不希望我的应用程序启动新活动,因为此应用程序将在受控环境中使用。我的应用程序将始终处于后台。当应用程序打开时(后台或前台),用户将收到通知,因此当用户收到此通知时,他们的应用程序应自动应用(而不是启动新活动),但只将当前活动推到前台

为了更好地理解这一点,我正在尝试实施:
用户A打开应用程序,然后将其最小化。因此,现在他有资格接收通知。应用程序当前在活动A上。当用户收到通知时,我们将收到的数据推送到列表中,并在活动A上显示。我要做的就是当用户A收到推送通知时,将活动A推到前台,不再创建活动A或任何类似的活动,而是将其推到前台。任何帮助都将不胜感激。谢谢大家!

在收到消息后,启动
通知活动
,检查您的应用程序是否已经运行,然后
完成
,该活动将为您带来堆栈上最后打开的活动,如果应用程序未运行,则启动您的
主活动

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {

     // Check if message contains a data payload.
       if (remoteMessage.getData().size() > 0) {
         Log.d(TAG, "Message data payload: " + remoteMessage.getData());
       }

     // Check if message contains a notification payload.
      if (remoteMessage.getNotification() != null) {
          startActivity(new Intent(this , NotificationActivity.class));
        }  
     }


public class NotificationActivity extends Activity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        // If this activity is the root activity of the task, the app is not running
        if (isTaskRoot())
        {
            // Start the app before finishing
            Intent startAppIntent = new Intent(getApplicationContext(), MainActivity.class);
            startAppIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(startAppIntent);
        }

      // Now finish, which will drop the user in to the activity that was at the top of the task stack
        finish();
    }
}

检查此项,并查看此项以了解更多详细信息。

您可以使用intent标志

 Intent.FLAG_ACTIVITY_SINGLE_TOP 
您的代码将是

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // TODO: Handle FCM messages here.
        Intent intent= new Intent(this,MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(intent);
    }
}

跟着。您可以在活动中注册广播,或者直接从
onMessageReceived()

调用该方法。我不想启动新活动,只想将当前活动置于前台。因为列表显示不会在任何地方持续,所以如果我继续启动活动列表显示将是无点的Start
NotificationActivity
只是让应用程序进入前台的一个技巧,然后杀死打开的活动将使您回到后堆栈上最后打开的列表。考虑处理<代码> OnSaveStaseChans和<代码> OnRealthStimeStand <代码>,Acvvivy将给它一个并保持您的发布!您还需要SYSTEM_ALERT_WINDOW权限才能从后台启动活动