我正在尝试创建一个多行通知,就像Gmail应用程序所做的那样,如下图所示(在一个通知下分组的5个通知)
我尝试了各种示例,但似乎只能创建单个通知,如
public void createSingleNotification(String title, String messageText, String tickerttext) {
int icon = R.drawable.notification_icon; // icon from resources
CharSequence tickerText = tickerttext; // ticker-text
long when = System.currentTimeMillis(); // notification time
Context context = getApplicationContext(); // application Context
CharSequence contentTitle = title; // expanded message title
CharSequence contentText = messageText; // expanded message text
Intent notificationIntent = new Intent(this, MainActivity.class);
Bundle xtra = new Bundle();
xtra.putString("title", title);
xtra.putString("message", messageText);
notificationIntent.putExtras(xtra);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
notificationIntent, PendingIntent.FLAG_ONE_SHOT
+ PendingIntent.FLAG_UPDATE_CURRENT);
String ns = Context.NOTIFICATION_SERVICE;
NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
Notification notification = new Notification(icon, tickerText, when);
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
notification.defaults |= Notification.DEFAULT_LIGHTS;
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.FLAG_AUTO_CANCEL;
notification.flags = Notification.DEFAULT_LIGHTS
| Notification.FLAG_AUTO_CANCEL;
final int HELLO_ID = 0;
mNotificationManager.notify(HELLO_ID, notification);
}
我不确定如何创建可以向其添加行的通知组。
这里我得到了解决方案:确保创建BrodCast Reciever以在通知解除时清除数组堆栈
static ArrayList<String> notifications = new ArrayList<>();
private static void sendNotification(String messageBody,Context cxt) {
//onDismiss Intent
Intent intent = new Intent(cxt, MyBroadcastReceiver.class);
PendingIntent broadcastIntent = PendingIntent.getBroadcast(cxt.getApplicationContext(), 0, intent, 0);
//OnClick Listener
startWFApplication().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(cxt, 0, startWFApplication(),
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(cxt)
.setSmallIcon(R.drawable.fevicon)
.setContentTitle("Title")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationCompat.InboxStyle inboxStyle =
new NotificationCompat.InboxStyle();
// Sets a title for the Inbox in expanded layout
inboxStyle.setBigContentTitle("Title - Notification");
inboxStyle.setSummaryText("You have "+notifications.size()+" Notifications.");
// Moves events into the expanded layout
notifications.add(messageBody);
for (int i=0; i < notifications.size(); i++) {
inboxStyle.addLine(notifications.get(i));
}
// Moves the expanded layout object into the notification object.
notificationBuilder.setStyle(inboxStyle);
NotificationManager notificationManager =
(NotificationManager) cxt.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
notificationBuilder.setDeleteIntent(broadcastIntent);
}
public static Intent startWFApplication(){
Intent launchIntent = new Intent();
launchIntent.setComponent(new ComponentName("your.package", "Yyour.package.servicename"));
return launchIntent;
}
BroadCastReciever看起来像这样:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Notification.notifications.clear();
}
}
在货单上写上:
<receiver
android:name="your.package.MyBroadcastReceiver"
android:exported="false" >
</receiver>
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("Event tracker")
.setContentText("Events received")
NotificationCompat.InboxStyle inboxStyle =
new NotificationCompat.InboxStyle();
String[] events = {"line 1","line 2","line 3","line 4","line 5","line 6"};
// Sets a title for the Inbox in expanded layout
inboxStyle.setBigContentTitle("Event tracker details:");
...
// Moves events into the expanded layout
for (int i=0; i < events.length; i++) {
inboxStyle.addLine(events[i]);
}
// Moves the expanded layout object into the notification object.
mBuilder.setStyle(inboxStyle);
...
// Issue the notification here.
我正在使用Firebase(FCM)向用户显示推送通知,但我遇到了一个奇怪的问题。 我的代码适用于以下场景(使用FirebaseMessagingService): 前台应用 - 在 onReceive() 中接收数据并在应用内显示弹出窗口。 后台应用 - 在 onReceive() 中接收数据并为用户显示通知。如果单击此按钮,应用程序将被带回前台。在LauncherActivity中收到此目的的
我有一个Android应用程序,可以通过Firebase接收通知。这些通知由网站上的用户操作触发。然后,我们的API向Firebase发送通知请求。 然而,最近我遇到了一个问题,我的应用程序一直不停地接收通知。对于直接通知和主题消息,这似乎都在发生。起初我以为是API卡在某种循环中,但事实并非如此,因为我直接从Firebase控制台发送的通知也会发生这种情况。我自己的理论是Firebase认为通知
下面是我的函数的简化版本: 我没有任何特定的java代码,因为我现在只需要显示通知。有没有人想过用一种简单的方法来存档这个问题?
我正在从google firebase为我的android应用程序发送推送通知,目标是Android5.0: 我的推送通知代码是: 但为什么?这就像当应用程序在后台时,通知不使用活动代码中的设置,而只使用AndroidManifest中的某种“默认”设置。
利用智能通知功能您可以在 Polar 设备上获取来电、消息和通知提醒。您将在 Polar 设备上获得与手机屏幕上相同的通知。 请注意,训练期间,您不能收到任何通知。 请确保您在手机上安装了 Android 版本 5.0 或更高版本。 请确保 Polar 设备的固件为最新版本。 要使用智能通知功能,您需要安装适合 Android 的 Polar Flow 移动应用程序,且 Polar 设备需要与该
我有以下代码,一旦我收到Firebase推送通知或FCM,我的Android应用程序就会出现在前台。 现在在MainActivity中,我使用了如下捆绑包: 我的代码在以下情况下正常工作: 当设备上接收到FCM时: 如果应用程序打开,则执行操作 如果应用程序在后台,即最小化,则应用程序打开并执行操作 如果应用程序被杀死,应用程序将打开并执行操作 如果应用程序被杀死并且手机被锁定,应用程序会在锁屏顶