use*_*234 6 android android-notifications android-activity android-broadcast
我有一个通知,当我选择时,它会发送Broadcast一个BroadcastReceiver使用a 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);
Roa*_*ock 12
尝试使用标志如下的意图.
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
对于Pending intent,使用PendingIntent.FLAG_UPDATE_CURRENT
对于会寻找类似问题的人。从 Android Q 开始,当应用程序在后台时,启动任何活动都受到限制。要启动您的活动,您需要显示通知并PRIORITY_HIGH设置全屏意图。所以,你完全应该有这样的东西:
//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 开始这是强制性的
| 归档时间: | 
 | 
| 查看次数: | 5765 次 | 
| 最近记录: |