Native Mobile App Development With Java

Android Push Notification Example Java

23-Sep-2025

Android Push Notification Example Java


1/  your app needs to send or show notifications, you must add the proper permission in the AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Notification">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name=".MyFirebaseService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>


</application>

</manifest>



2/  This service handles incoming Firebase Cloud Messages and shows notifications to the user

package com.example.notification;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.pm.PackageManager;
import android.os.Build;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

public class MyFirebaseService extends FirebaseMessagingService {

@Override
public void onMessageReceived(@NonNull RemoteMessage message) {
super.onMessageReceived(message);

// Step 1: Create notification channel for Android O and above
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(
"fcm_notification", // Channel ID
"FCM Notification", // Channel Name
NotificationManager.IMPORTANCE_HIGH // Channel importance
);
NotificationManager manager = getSystemService(NotificationManager.class);
if (manager != null) {
manager.createNotificationChannel(channel);
}
}

// Step 2: Build notification if message contains notification payload
if (message.getNotification() != null) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "fcm_notification")
.setSmallIcon(R.drawable.outline_ac_unit_24) // Notification icon
.setContentTitle(message.getNotification().getTitle()) // Notification title
.setContentText(message.getNotification().getBody()) // Notification body
.setAutoCancel(true) // Auto-dismiss when tapped
.setPriority(NotificationCompat.PRIORITY_HIGH); // High priority

NotificationManagerCompat managerCompat = NotificationManagerCompat.from(this);

// Step 3: Check POST_NOTIFICATIONS permission (required for Android 13+)
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.POST_NOTIFICATIONS)
!= PackageManager.PERMISSION_GRANTED) {
return; // Exit if permission is not granted
}

// Step 4: Show the notification
managerCompat.notify(111, builder.build());
}
}
}




3/ This activity requests the notification permission on Android 13+ devices.  

package com.example.notification;

import android.Manifest;
import android.os.Build;
import android.os.Bundle;

import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Step 1: Check if Android version is 13+ (Tiramisu)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {

// Step 2: Check if POST_NOTIFICATIONS permission is already granted
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)
!= android.content.pm.PackageManager.PERMISSION_GRANTED) {

// Step 3: Create a launcher to request permission
ActivityResultLauncher<String> requestPermissionLauncher =
registerForActivityResult(
new ActivityResultContracts.RequestPermission(),
isGranted -> {

// Step 4: Optional: handle user's response here
if (isGranted) {
// Permission granted
} else {
// Permission denied
}
});

// Step 5: Launch the permission request
requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
}
}
}
}


4/ This dependency adds Firebase Cloud Messaging (FCM) support for handling push notifications in the app.

dependencies {

implementation(libs.appcompat)
implementation(libs.material)
implementation(libs.activity)
implementation(libs.constraintlayout)
testImplementation(libs.junit)
androidTestImplementation(libs.ext.junit)
androidTestImplementation(libs.espresso.core)
implementation("com.google.firebase:firebase-messaging:24.0.0")

}

Comments