例如在WhatsApp中。当我打电话给某人时,即使该应用程序处于后台或已终止,也会打开活动。我该如何实施?另外,我也不希望我的应用程序启动新活动,因为此应用程序将在受控环境中使用。我的应用程序将始终在后台。当应用程序打开时(背景或前台),用户将收到通知,因此当他们收到此通知时,应用程序应自动应用程序(不启动新活动),而只是将当前活动推送到前台。
为了最好地理解这是我要实现的目标: 用户A打开应用程序,然后将其最小化。因此,现在他有资格接收通知。该应用程序当前位于活动A上。当用户收到通知时,我们会将收到的数据推送到列表中,并在活动A上显示它。我要做的就是当用户A收到将活动A推到前台的推送通知时无需再次创建活动A或类似活动,而只需将其放到前台即可。任何帮助将非常感激。谢谢!
答案 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();
}
}