我收到通知,当我选择时,会使用Broadcast
向BroadcastReceiver
发送PendingIntent
。在onReceive
我开始新的Activity
。
但是,如果我从最近打开的应用程序中移除我的应用程序(或通知在绘图中长时间停留),则会出现这种情况:
当我在抽屉中有多个通知时,第一个通知很棒。在点击第二个点后,我的onCreate()
和我的onResume()
被调用,就像startActivity()
根本不工作一样。如果我添加标记Intent.FLAG_ACTIVITY_SINGLE_TOP
,则会调用onNewIntent
。
notificationIntent = new Intent();
notificationIntent.setAction(AppConstants.ACTION_ACTIVITY);
notificationIntent.putExtra("key", value);
int requestID = (int) System.currentTimeMillis();
mBuilder.setContentIntent(PendingIntent
.getBroadcast(context, requestID, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT));
的onReceive
Intent intent = new Intent(context, Activity.class);
intent.putExtra("key", value);
//IF I ADD FLAG_ACTIVITY_SINGLE_TOP IT WORKS
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
答案 0 :(得分:12)
尝试使用以下标志作为意图。
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
对于待定意图使用PendingIntent.FLAG_UPDATE_CURRENT
答案 1 :(得分:3)
为了从BroadcastReceiver启动活动,你应该添加FLAG_ACTIVITY_NEW_TASK的标志
Intent imap =new Intent(context,MainActivity.class);
imap.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(imap);
答案 2 :(得分:1)
对于寻找相似问题的人。从Android Q开始,restricted可以在后台运行应用程序时启动任何活动。要启动活动,您需要显示一个带有PRIORITY_HIGH
的通知并设置full-screen intent。所以,总的来说,你应该有这样的东西:
//Create your intent as usual
Intent intent = new Intent(context, Activity.class);
intent.putExtra("key", value);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Build a pending intent
PendingIntent pIntent = PendingIntent.getActivity(context, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
//Notification builder
NotificationCompat.Builder notifyBuilder = new NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(title)
.setPriority(PRIORITY_HIGH)
.setFullScreenIntent(pIntent, true /*isHighPriority*/);
NotificationManager nManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
nManager.notify(10, notifyBuilder.build())
这将显示通知并立即启动您的活动。在您的活动onStart()
中,您可以关闭以下通知:
NotificationManager nManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
nManager.cancel(10);
注意:请不要忘记初始化频道。从Android O开始,这是强制性的事情