First of all, let me tell you what I have done so far. I have gone through lots of searching including
Remoteview is not applied in background
firebase_messaging not customizing notification when an app is not in the foreground
Also, I have referred GitHub and lots of articles but none of these worked for me so that is the reason I am posting this question, so please do not mark this as duplicate.
Its Working fine when App is Running, but it displays system notification when the app is in background.
Do we need to add custom_notification_layout reference to manifest? (is there any meta tag
or anything?)
This is
MyFireBaseMessagingService.java
class
public class MyFireBaseMessagingServiceTmp extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
JSONObject jsonObject = new JSONObject(remoteMessage.getData());
String title = jsonObject.optString("title");
String message = jsonObject.optString("message");
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= 26) {
NotificationChannel channel = new NotificationChannel("my_notifications", "My notifications", NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(channel);
}
RemoteViews remoteViews;
if (title == "BIG BANG") {
remoteViews = new RemoteViews(getPackageName(), R.layout.layout_remainder_with_buttons);
} else {
remoteViews = new RemoteViews(getPackageName(), R.layout.layout_remainder_no_buttons);
}
remoteViews.setTextViewText(R.id.txtTitle, title);
remoteViews.setTextViewText(R.id.txtMsg, message);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "my_notifications");
notificationBuilder.setAutoCancel(true);
notificationBuilder.setCustomBigContentView(remoteViews);
{
Intent intentGotIt = new Intent("ACTION_GOT_IT");
PendingIntent pendingIntentGotIt = PendingIntent.getBroadcast(this, 0, intentGotIt, PendingIntent.FLAG_ONE_SHOT);
remoteViews.setOnClickPendingIntent(R.id.btnGotIt, pendingIntentGotIt);
}
{
Intent intentSnooze = new Intent("ACTION_SNOOZE");
PendingIntent pendingIntentSnooze = PendingIntent.getBroadcast(this, 0, intentSnooze, PendingIntent.FLAG_ONE_SHOT);
remoteViews.setOnClickPendingIntent(R.id.btnSnooze, pendingIntentSnooze);
}
notificationBuilder.setSmallIcon(R.mipmap.ic_launcher);
notificationBuilder.setPriority(Notification.PRIORITY_HIGH);
notificationBuilder.setAutoCancel(true);
Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
notificationBuilder.setLargeIcon(icon);
Notification notification = notificationBuilder.build();
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
notification.vibrate = new long[]{0, 400, 200, 400};
notificationManager.notify(1000, notification);
}
}
This is
layout_remainder_with_buttons.xml
layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="110dp"
android:background="@drawable/bg_gradient_blue">
<ImageView
android:id="@+id/ivLogo"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="10dp"
android:src="@drawable/logo_round" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toEndOf="@+id/ivLogo"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="5dp">
<TextView
android:id="@+id/txtTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="Notification title" />
<TextView
android:id="@+id/txtMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/txtTitle"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="Notification msg" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical"
android:orientation="horizontal"
tools:visibility="visible">
<Button
android:id="@+id/btnGotIt"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_marginEnd="10dp"
android:background="@drawable/bg_button_oval_green"
android:gravity="center"
android:padding="5dp"
android:text="Got it...!"
android:textAllCaps="true"
android:textColor="@color/white"
android:textStyle="bold" />
<Button
android:id="@+id/btnSnooze"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:background="@drawable/bg_button_oval_red"
android:gravity="center"
android:padding="5dp"
android:text="Snooze"
android:textAllCaps="true"
android:textColor="@color/white"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
This is
layout_remainder_no_buttons.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="70dp"
android:background="@drawable/bg_gradient_blue">
<ImageView
android:id="@+id/ivLogo"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:layout_marginStart="10dp"
android:layout_marginEnd="5dp"
android:src="@drawable/logo_round" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toEndOf="@+id/ivLogo"
android:gravity="center_vertical"
android:orientation="vertical"
android:padding="5dp">
<TextView
android:id="@+id/txtTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Remainder"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/txtMsg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/txtTitle"
android:ellipsize="end"
android:maxLines="2"
android:text="Its time to place order for `For Father`"
android:textColor="@color/white"
android:textSize="14sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/txtMsg"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal"
android:visibility="gone">
<Button
android:id="@+id/btnSave"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_weight="1"
android:background="@null"
android:gravity="center"
android:padding="5dp"
android:text="Got it...!"
android:textAllCaps="true"
android:textColor="@color/white"
android:textStyle="bold" />
<Button
android:id="@+id/btnCancel"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_weight="1"
android:background="@null"
android:gravity="center"
android:padding="5dp"
android:text="Snooze"
android:textAllCaps="true"
android:textColor="@color/app_red"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>