In this tutorial, I will explain about Foreground service android, How does work? What are the advantages and implementation? At last, I will prepare a foreground service sample app. So let’s get started.
What is Foreground Service
For more clarity let’s takes example Gmail, You are just using Gmail app and listening to music that is being played by Music Player application. So Music Player is basically using the foreground service to play the music. The foreground service always uses the Notification to notify the user and using the notification you can actually interact with the service or the ongoing operation such as pause the music or play the next music.
So whenever in your app you see a notification that is performing some long running tasks that service is basically the foreground service and Foreground Service is always noticeable to the user that is the user is aware of this ongoing process.
Step up to writing implementation
- Initial Project Setup
- Create a subclass of Service – ForgroundService.java
- Create Notification Channel
- Override methods
- onStartCommand
- Mandatory to override for Foreground Service
- onBind
- Mandatory to override for Foreground Service
- Must return null for Foreground Service
- onCreate
- Optional to override
- Call only once, when Service is being created for the first time
- onDestory
- Optional to override
- Call when background service is destroyed
- onStartCommand
- Declare your service in Manifest.xml
1. Initial Project Setup
Let’s move to Android Studio and create a new project with EmptyActivity template. Here I’m using package name is com.wave.foregroundservice. You can use as per your project need
2. Create a subclass of Service – ForgroundService.java
Just create a subclass of Service class in main package and override necessary methods.
package com.wave.foregroundservice; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.Build; import android.os.IBinder; import android.support.annotation.Nullable; import android.support.v4.app.NotificationCompat; public class ForegroundService extends Service { public static final String CHANNEL_ID = "ForegroundServiceChannel"; @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { String input = intent.getStringExtra("inputExtra"); createNotificationChannel(); Intent notificationIntent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("Foreground Service") .setContentText(input) .setSmallIcon(R.drawable.ic_stat_name) .setContentIntent(pendingIntent) .build(); startForeground(1, notification); //do heavy work on a background thread //stopSelf(); return START_NOT_STICKY; } @Override public void onDestroy() { super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } }
3. Create Notification Channel
For creating Notification Channel add below code in Foreground Service class
private void createNotificationChannel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel serviceChannel = new NotificationChannel( CHANNEL_ID, "Foreground Service Channel", NotificationManager.IMPORTANCE_DEFAULT ); NotificationManager manager = getSystemService(NotificationManager.class); manager.createNotificationChannel(serviceChannel); } }
Full Source code of ForegroundService.java
package com.wave.foregroundservice; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.Build; import android.os.IBinder; import android.support.annotation.Nullable; import android.support.v4.app.NotificationCompat; public class ForegroundService extends Service { public static final String CHANNEL_ID = "ForegroundServiceChannel"; @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { String input = intent.getStringExtra("inputExtra"); createNotificationChannel(); Intent notificationIntent = new Intent(this, MainActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("Foreground Service") .setContentText(input) .setSmallIcon(R.drawable.ic_stat_name) .setContentIntent(pendingIntent) .build(); startForeground(1, notification); //do heavy work on a background thread //stopSelf(); return START_NOT_STICKY; } @Override public void onDestroy() { super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } private void createNotificationChannel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel serviceChannel = new NotificationChannel( CHANNEL_ID, "Foreground Service Channel", NotificationManager.IMPORTANCE_DEFAULT ); NotificationManager manager = getSystemService(NotificationManager.class); manager.createNotificationChannel(serviceChannel); } } }
4. Declare your service in Manifest.xml
5. Modify actviity_main.xml
Go to res=> layout and open activity_main.xml, I’m adding two button this layout one for start service another one for stop service.
6. Open MainActivity and add onClickListener on button
Let’s open MainActivity from src folder and add below code
package com.wave.foregroundservice; import android.content.Intent; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { Button btnStartService, btnStopService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnStartService = findViewById(R.id.buttonStartService); btnStopService = findViewById(R.id.buttonStopService); btnStartService.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startService(); } }); btnStopService.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { stopService(); } }); } public void startService() { Intent serviceIntent = new Intent(this, ForegroundService.class); serviceIntent.putExtra("inputExtra", "Foreground Service Example in Android"); ContextCompat.startForegroundService(this, serviceIntent); } public void stopService() { Intent serviceIntent = new Intent(this, ForegroundService.class); stopService(serviceIntent); } }
Now your job is done, Your foreground service code is ready to run. Let’s run the project, Your app is up and running. While you click on ‘start service’ button than service will be started, and notification will appear on notification bar. Notification will disappear once you clicked on ‘stop service’ button.
If you have any queries, feel free to ask them in the comment section below. Happy Coding
The post Foreground Service Android Example appeared first on AndroidWave.