我想在用户点击通知时打开我的应用,如果它不在前台。
到目前为止我得到了这个:
private void adNotification(Ad ad) {
PendingIntent dummyIntent = PendingIntent.getActivity(this, 0, new Intent(), Intent.FLAG_ACTIVITY_NEW_TASK);
Intent notificationIntent = new Intent(this, SplashScreen.class);
Store storeFromAd = ad.getStoreFromAd();
notificationIntent.putExtra("uzlet", new Gson().toJson(storeFromAd));
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.icon).setAutoCancel(true).setContentTitle(ad.ad_title)
.setStyle(new NotificationCompat.BigTextStyle().bigText(ad.ad_text)).setContentText(ad.ad_short_text);
mBuilder.setContentIntent(dummyIntent);
//Checks whether the application is in foreground.
if (MainActivity.isInFront) {
Log.i("isInFront-serviceCheck", "isInFront = true");
mBuilder.setContentIntent(dummyIntent);
}
else {
Log.i("isInFront-serviceCheck", "isInFront = false");
mBuilder.setContentIntent(contentIntent);
}
int notifID = Integer.parseInt(ad.ad_id);
mNotificationManager.notify(notifID, mBuilder.build());
}
我的活动有一个 isInFront
布尔变量:
@Override
protected void onResume() {
super.onResume();
isInFront = true;
Log.i("isInFront-onResume", "isInFront = true");
}
@Override
protected void onDestroy() {
super.onDestroy();
isInFront = false;
Log.i("isInFront-onDestroy", "isInFront = false");
}
好吧,我的问题是:
当然,当您立即点击通知时它会起作用,例如:
我的应用程序位于前台,isInFront
变量为true。
我收到通知,通知构建器使用虚拟意图构建它,什么都不做。
我没有点击通知,而是关闭了应用。
现在我点击通知,并且应用程序未打开,因为通知构建器在isInFront变量为true时构建它。
所以问题是,通知的意图是没有保留应用程序的当前状态,它是在发送到设备时保持该状态。
我怎么能做这个工作?有什么想法吗?