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;
}
}
All method calls are executing as expected, geting Notification in Notification bar but Appbadge is not shown in Android O devices, when app is closed. Please tell me what is the mistake I am doing?
If I put Channel creation code and Notification code in side click event of some view then it works fine, when app is open.
In Android notification badges doesn't work as they are in iOS. They just showing that the app has some notifications that are in the status bar. When notification is removed from status bar, than badge will also disappear.
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments