当前位置: 首页 > 知识库问答 >
问题:

当通知的目标活动处于打开状态时,单击该通知不会打开新活动

秦宜修
2023-03-14

我有两个活动Main activity和ReceivedMessageActivity。以及一个后台服务,用于从中获取上下文并传递给SMSReceiver,SMSReceiver扩展BroadcastReceiver以接收sms。当收到短信时,SMSReceiver会创建通知。我希望当我点击通知时,如果应用程序未运行ReceivedMessageActivity,则打开该通知;如果应用程序正在运行且ReceivedMessageActivity已打开,则不要故意创建新活动,而只是将ReceivedMessageActivity放在前面。我将清单中的启动模式设置为singleTop,因为MainActivity正在工作,但ReceivedMessageActivity不工作!我将通知意图标记设置为标记|活动|带|到|前面|意图。标记活动单顶部和标记活动清除顶部但不工作。我将ReceivedMessageActivity的manifest launchMode设置为singleInstance其工作,但当我手动设置ReceivedMessageActivity时,它的默认动画不工作(从右到左动画)。这是我的通知代码:

public void addNotifiction(String title, String message) {
    NotificationCompat.Builder builder = new     
    NotificationCompat.Builder(context);
    builder.setContentTitle(title);
    builder.setContentText(message);
    builder.setStyle(new 
    NotificationCompat.BigTextStyle().bigText(message));
    builder.setAutoCancel(true);
    builder.setDefaults(Notification.DEFAULT_ALL);
    builder.setSmallIcon(R.drawable.edit_icon);
    builder.setCategory(NotificationCompat.CATEGORY_MESSAGE);
    builder.setPriority(NotificationCompat.PRIORITY_MAX);

    Intent notifactionIntent = new Intent(context,     
    ReceivedMessagesActivity.class);
    notifactionIntent 
  .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
    TaskStackBuilder taskStackBuilder=TaskStackBuilder.create(context);
    taskStackBuilder.addNextIntentWithParentStack(notifictionIntent);
    PendingIntent contentPendingIntent= taskStackBuilder.getPendingIntent (0,PendingIntent.FLAG_UPDATE_CURRENT);
    builder.setContentIntent(contentPendingIntent);
    NotificationManager manager = (NotificationManager) context.getSystemService (Context.NOTIFICATION_SERVICE);

    manager.notify(NOTIFICATION_ID++, builder.build());

}

我的上下文是MyService类上下文:

Context context=MyService.context

编辑:我发现,当我在清单中为receivedMessageActivity使用android:parentActivityName=“.MainActivity”时,会发生这种情况,当我点击通知并打开receivedMessageActivity时,我的应用程序会创建新的receivedMessageActivity为什么?

共有1个答案

全心思
2023-03-14

Notification maker的基本框架来自我的一个应用程序,希望它能有所帮助:

Context context = getApplicationContext();
String title = context.getString(R.string.title);
String subtitle = context.getString(R.string.subtitle);

Notification.Builder notificationBuilder = null;
//        Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

Intent intent = new Intent(getBaseContext(), ReceivedMessageActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_SINGLE_TOP);

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {

    notificationBuilder = new Notification.Builder(
            context,
            CHANNEL_ID)
    ) //
            .setContentTitle(title)
            .setContentText(subtitle)
            .setSmallIcon(R.drawable.icon)
            .setColor(ContextCompat.getColor(context, R.color.colorPrimary))
            .setContentIntent(
                    PendingIntent.getActivity(
                            getBaseContext(),
                            0,
                            intent,
                            0
                    )
            )
            .setAutoCancel(true);

} else {
    notificationBuilder = new Notification.Builder(context) //
            .setContentTitle(title)
            .setContentText(subtitle)
            .setSmallIcon(R.drawable.icon)
            .setColor(ContextCompat.getColor(context, R.color.colorPrimary))
            .setContentIntent(
                    PendingIntent.getActivity(
                            getBaseContext(),
                            0,
                            intent,
                            0
                    )
            )
            .setAutoCancel(true);
}
startForeground(NOTIFICATION_ID, notificationBuilder.build());// only in case you are in service

以下代码未经测试

 类似资料:
  • 我有一个带有通知的应用程序,如果我单击它们,就会打开某个活动。我想要的是,如果我点击通知,活动已经打开,它不是重新开始,但只是出现在前面。 我可以用标志来管理它吗?还是我应该在SharedPreferences中存储一个变量来检查它是否已打开? 谢谢!

  • 我已经尝试了所有的方法,但它不适合我。我想打开或恢复应用程序,无论屏幕打开,同时单击通知。 我使用了以下方法:

  • 我目前遇到以下问题: 我已经实现了自定义FirebaseMessagingService,并且覆盖了方法onMessageReceived()。此外,当应用程序在后台时,我从getExtras()获取捆绑包 我需要通知内容,以便在db中本地保存 发生了什么: 当应用程序处于后台时,从Firebase控制台发送3个通知 创建了3个状态栏通知 单击其中一个- 你能帮忙吗? 启动器活动代码: 自定义Fi

  • 我正在工作的应用程序中,我被要求显示通知。对于通知,我使用的是FireBase云消息(FCM)。我能够得到通知,当应用程序在后台。 2.)MyFirebaseInstanceIDService 这是我在MyFirebaseMessagingService类中为onMessageReceived()方法编写的代码示例。

  • firebase工作得很好,在状态栏上推送通知,但我的挑战是当通知被点击时,我希望它带我到我的自定义活动而不是默认的启动器,我该怎么做呢? 这是我想在通知计时时打开的自定义活动。通知来自Firebase cloud Messaging。 } 这是侦听来自FireBase的通知的服务。