我正在使用FCM向我的应用程序发送通知,但出现了问题。如果我的用户正在使用该应用程序,只需按下主页按钮(而不是后退键(即可退出该应用程序并收到通知,然后按下通知,我的应用程序将重新打开。如果用户按下后退按钮,他/她将退出重新打开的应用程序,并且他/她会在按下主页按钮之前被引导到应用程序的最后状态。(换句话说,用户应该按下两次后退按钮,一次用于退出重新打开的应用程序,另一次用于在后台退出应用程序(
如果应用程序在后台,我如何加载应用程序的最后状态,如果不是,我如何通过录制通知重新打开应用程序?
编辑:
我改变了";onMessageReceived";代码如下,但没有任何变化:
class MyFireBase() : FirebaseMessagingService(){
override fun onNewToken(p0: String) {
super.onNewToken(p0)
}
override fun onMessageReceived(p0: RemoteMessage) {
try {
val intent = Intent()
intent.action = "ACTION_STRING_ACTIVITY"
intent.putExtra("category", p0.data["category"])
sendBroadcast(intent)
val notificationIntent = Intent(baseContext, MainActivity::class.java)
notificationIntent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
PendingIntent.getActivity(
baseContext,
1,
notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT
)
super.onMessageReceived(p0)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
如果您使用Firebase Cloud Messaging向应用程序发送通知,则意味着您可以创建自己的通知。然后,您所要做的就是为intent
:设置正确的FLAG
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
try {
Intent notificationIntent = new Intent(context, MainActivity.class);
//Intent.FLAG_ACTIVITY_NEW_TASK Launches a new instances of your Activity.
//So if there is already one in background, there will be two instances.
//Intent.FLAG_ACTIVITY_CLEAR_TOP is what you want, it resumes the last
//session if there is any, or launches a new instance if there is no instance in background
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(context, requestID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//do the rest
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
我通过更改活动的启动模式解决了这个问题,因此,在AndroidManifest中,我为MainActivity设置了launchMode = singleTask
。