有没有一种方法可以在收到推送通知时将应用程序置于前台?

时间:2018-07-18 04:07:39

标签: android firebase android-activity push-notification state

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

为了最好地理解这是我要实现的目标: 用户A打开应用程序,然后将其最小化。因此,现在他有资格接收通知。该应用程序当前位于活动A上。当用户收到通知时,我们会将收到的数据推送到列表中,并在活动A上显示它。我要做的就是当用户A收到将活动A推到前台的推送通知时无需再次创建活动A或类似活动,而只需将其放到前台即可。任何帮助将非常感激。谢谢!

3 个答案:

答案 0 :(得分:3)

您可以使用意图标志。

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

答案 1 :(得分:1)

关注this answer。您可以在活动中注册广播,或直接从onMessageReceived()

调用方法

答案 2 :(得分:0)

收到消息后,开始NotificationActivity,它将检查您的应用程序是否已在运行,然后finish 该活动将使您上次打开的活动进入堆栈,并且如果应用程序未运行将启动您的MainActivity

    @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();
    }
}

选中此 answeranswer,以获取更多详细信息。