public class GcmBroadcastReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{// Control comes here when any new notification is received
final Notification notification = getNotification(threadId, jobTitle, body, subTitle, title, imageURL);
EventLoggerService.showAppBadge(context, notification, new EventLoggerService.EventLoggerServiceStartedListner(){
@Override
public void eventLoggerServiceStarted() {
notificationManager.notify(101, notification);
}
});
}
public Notification getNotification(final String threadId, String jobTitle, final String body ,String subTitle, String title, final String imageURL)
{
final Context context = CareSDKApplication.singleton().getApplicationContext();
mThreadId = threadId;
mImageURL = imageURL;
mBody = body;
mTitle = title;
mSubTitle = subTitle;
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NotificationsUtils.NOTIFICATION_CHANNEL_ID)
// .setLargeIcon(largeIcon)
.setSmallIcon(R.drawable.message_notification)
.setAutoCancel(true)
.setContentIntent(getContentIntent(threadId))
.setTicker(getTicker(threadId));
RemoteViews customNotification = new RemoteViews(context.getPackageName(), R.layout.image_notification_custom_view);
builder.setCustomContentView(customNotification);
if (!TextUtils.isEmpty(title))
{
customNotification.setTextViewText(R.id.title, StringEscapeUtils.unescapeJava(title));
customNotification.setTextViewText(R.id.sub_title, StringEscapeUtils.unescapeJava(subTitle));
customNotification.setTextViewText(R.id.content, StringEscapeUtils.unescapeJava(body));
}
else
{
customNotification.setTextViewText(R.id.title, "");
customNotification.setTextViewText(R.id.sub_title, StringEscapeUtils.unescapeJava(body));
customNotification.setTextViewText(R.id.content, "");
}
customNotification.setTextViewText(R.id.time, new SimpleDateFormat("HH:mm").format(new Date()));
customNotification.setTextViewText(R.id.number_of_notifications, getUnreadCount(threadId) + "");
//builder.setPriority(Notification.PRIORITY_MAX);
mBuilder = builder;
// For versions equal and higher than jelly bean
if (Build.VERSION.SDK_INT >= 16) {
builder.setStyle(getStyle(threadId));
}
if (!TextUtils.isEmpty(imageURL)) {
mBigPicture = Utils.getImage(context, imageURL, this);
if (mBigPicture != null) {
setImageNotification(builder, context, threadId, body, title, subTitle);
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
builder.setColor(0x00bce4);
}
Notification notification = builder.build();
return notification;
}
}
public class EventLoggerService extends IntentService
{
private static EventLoggerServiceStartedListner
mEventLoggerServiceStartedListner;
private static Notification mNotification;
@Override
public void onCreate()
{
super.onCreate();
// This is required for Android O
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1)
{
android.os.Debug.waitForDebugger();
NotificationsUtils notificationsUtils = new NotificationsUtils(this);
startForeground(1, mNotification);
Log.d("EventLoggerService", "EventLoggerService Created");
}
}
public interface EventLoggerServiceStartedListner{
public void eventLoggerServiceStarted();
}
@Override
public void onStart(@Nullable Intent intent, int startId) {
super.onStart(intent, startId);
Log.d("EventLoggerService", "EventLoggerService Started");
}
@Override
public int onStartCommand(@Nullable Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
Log.d("EventLoggerService", "EventLoggerService onStartCommand");
mEventLoggerServiceStartedListner.eventLoggerServiceStarted();
return START_STICKY;
}
public static void showAppBadge(Context context, Notification notification, EventLoggerServiceStartedListner eventLoggerServiceStartedListner)
{
android.os.Debug.waitForDebugger();
mNotification = notification;
mEventLoggerServiceStartedListner = eventLoggerServiceStartedListner;
Intent service = new Intent(context, EventLoggerService.class);
context.startForegroundService(service);
}
}
public class NotificationsUtils extends ContextWrapper{
public static final String NOTIFICATION_CHANNEL_ID = "Care_push_note";
public static final String NOTIFICATION_CHANNEL_NAME = "Care.com";
Context mContext;
NotificationManager mNotificationManager;
public NotificationsUtils(Context context) {
super(context);
mContext = context;
createChannels();
}
public void createChannels()
{
// Notification Channel is created for same channel id as Notification is created in side getNotification method of GcmBroadcastReceiver
NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
channel.setShowBadge(true);
channel.enableLights(true);
channel.enableVibration(true);
channel.setLightColor(Color.GREEN);
channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
getManager().createNotificationChannel(channel);
}
public NotificationManager getManager() {
if (mNotificationManager == null) {
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
}
return mNotificationManager;
}
}
所有方法调用都按预期执行,在通知栏中生成通知,但在应用关闭时,Android O设备中不会显示Appbadge。请告诉我我在做什么错?
如果我将频道创建代码和通知代码放在某个视图的侧面点击事件中,那么当app打开时,它可以正常工作。
答案 0 :(得分:0)
在Android通知中,徽章并不像在iOS中那样有效。他们只是显示应用程序有状态栏中的一些通知。当通知从状态栏中删除时,徽章也会消失。