我有两个活动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为什么?
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的通知的服务。