Services in Android using Jetpack Compose
Last Updated :
31 Aug, 2022
Services in Android applications are used to perform some background tasks within android applications. We can call the service to perform a specific task in the background of our application. That task will be performed continuously if our application is not visible to the user. Services are generally seen used in Music Player applications where the songs are played in the background and simultaneously we will be able to use other applications as well. In this article, we will take a look at How to use Services in Android using Jetpack Compose.
Step by Step Implementation
Step 1: Create a New Project in Android Studio
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio. While choosing the template, select Empty Compose Activity. If you do not find this template, try upgrading the Android Studio to the latest version. We demonstrated the application in Kotlin, so make sure you select Kotlin as the primary language while creating a New Project.
Step 2: Adding a new color to the Color.kt file
Navigate to app > java > your app's package name > ui.theme > Color.kt file and add the below code to it. Comments are added in the code to get to know in detail.
Kotlin
package com.example.newcanaryproject.ui.theme
import androidx.compose.ui.graphics.Color
val Purple200 = Color(0xFF0F9D58)
val Purple500 = Color(0xFF0F9D58)
val Purple700 = Color(0xFF3700B3)
val Teal200 = Color(0xFF03DAC5)
// on below line we are adding different colors.
val greenColor = Color(0xFF0F9D58)
Step 3: Creating a new class for our service
Navigate to app>java>your app's package name>Right click on it>New>Java/Kotlin class and name it as MyService and add the below code to it. Comments are added in the code to get to know in detail.
Kotlin
package com.example.newcanaryproject
import android.app.Service
import android.content.Intent
import android.media.MediaPlayer
import android.os.IBinder
import android.provider.Settings
class MyService : Service() {
// declaring object of MediaPlayer
private lateinit var player: MediaPlayer
// execution of service will start
// on calling this method
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
// creating a media player which
// will play the audio of Default
// ringtone in android device
player = MediaPlayer.create(this, Settings.System.DEFAULT_RINGTONE_URI)
// providing the boolean
// value as true to play
// the audio on loop
player.setLooping(true)
// starting the process
player.start()
// returns the status
// of the program
return START_STICKY
}
// execution of the service will
// stop on calling this method
override fun onDestroy() {
super.onDestroy()
// stopping the process
player.stop()
}
override fun onBind(intent: Intent): IBinder? {
return null
}
}
Step 4: Working with the MainActivity.kt file
Go to the MainActivity.kt file and refer to the following code. Below is the code for the MainActivity.kt file. Comments are added inside the code to understand the code in more detail.
Kotlin
package com.example.newcanaryproject
import android.content.Context
import android.content.Context.BATTERY_SERVICE
import android.content.Intent
import android.graphics.drawable.Animatable
import android.net.wifi.WifiManager
import android.text.format.Formatter
import android.os.BatteryManager
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.annotation.RequiresApi
import androidx.compose.animation.core.LinearOutSlowInEasing
import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.keyframes
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.newcanaryproject.ui.theme.NewCanaryProjectTheme
import com.example.newcanaryproject.ui.theme.greenColor
import com.github.skydoves.colorpicker.compose.*
import kotlinx.coroutines.delay
class MainActivity : ComponentActivity() {
@RequiresApi(Build.VERSION_CODES.M)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
NewCanaryProjectTheme {
// on below line we are specifying background color for our application
Surface(
// on below line we are specifying modifier and color for our app
modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background
) {
// on the below line we are specifying
// the theme as the scaffold.
Scaffold(
// in scaffold we are specifying the top bar.
topBar = {
// inside top bar we are specifying background color.
TopAppBar(backgroundColor = greenColor,
// along with that we are specifying
// title for our top bar.
title = {
// in the top bar we are specifying tile as a text
Text(
// on below line we are specifying
// text to display in top app bar.
text = "GFG",
// on below line we are specifying
// modifier to fill max width.
modifier = Modifier.fillMaxWidth(),
// on below line we are specifying
// text alignment.
textAlign = TextAlign.Center,
// on below line we are specifying
// color for our text.
color = Color.White
)
})
}) {
// on below line we are calling connection
// information method to display UI
servicesUI(context = LocalContext.current)
}
}
}
}
}
}
@Composable
fun servicesUI(context: Context) {
// on below line creating variable
// for service status and button value.
val serviceStatus = remember {
mutableStateOf(false)
}
val buttonValue = remember {
mutableStateOf("Start Service")
}
// on below line we are creating a column,
Column(
// on below line we are adding a modifier to it,
modifier = Modifier
.fillMaxSize()
// on below line we are adding a padding.
.padding(all = 30.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
// on the below line we are adding a text for heading.
Text(
// on below line we are specifying text
text = "Services in Android",
// on below line we are specifying text color,
// font size and font weight
color = greenColor,
fontSize = 20.sp,
fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(20.dp))
Button(onClick = {
if (serviceStatus.value) {
// service already running
// stop the service
serviceStatus.value = !serviceStatus.value
buttonValue.value = "Start Service"
context.stopService(Intent(context, MyService::class.java))
} else {
// service not running start service.
serviceStatus.value = !serviceStatus.value
buttonValue.value = "Stop Service"
// starting the service
context.startService(Intent(context, MyService::class.java))
}
}) {
// on below line creating a text for our button.
Text(
// on below line adding a text,
// padding, color and font size.
text = buttonValue.value,
modifier = Modifier.padding(10.dp),
color = Color.White,
fontSize = 20.sp
)
}
}
}
Step 5: Adding our service to our AndroidManifest.xml file
Navigate to the AndroidManifest.xml file and add below to your activity tag to register your service.
XML
<service android:name=".MyService" />
Now run your project to see the output of your application.
Output:
Similar Reads
ListView in Android using Jetpack Compose
A ListView is a UI component that displays data in a vertically scrollable list, where each item is placed one below the other. It is widely used in Android applications to showcase categorized data in an organized manner. In Jetpack Compose, the traditional ListView from XML-based layouts is replac
2 min read
Text in Android using Jetpack Compose
Jetpack Compose is a new toolkit provided by Google. This is useful for designing beautiful UI designs. Android Text is a simple view in Android which is used to display text inside our App. In this article, we will take a look at the implementation of Text in Android using Jetpack Compose. Importan
5 min read
Time Picker in Android using Jetpack Compose
In Android, a Time Picker is a modern UI element, used in applications like Alarm and Reminders, that requires users to select a particular time for performing a particular task. It is a user interface control for selecting the time in either 24-hour format or 12-hour (AM/PM) mode. In this article,
3 min read
SmsManager in Android using Jetpack Compose
Many times while building an android application we have to add a feature through which users will be able to directly send SMS from our android application. So in this article, we will take a look at How to send a text message over a phone using SMS Manager in Android using Jetpack Compose. A sampl
6 min read
Date Picker in Android using Jetpack Compose
In Android, a Date Picker is a widget used to select a date from the calendar. When a Date Picker is implemented in an application, the user can select a year, a month, and a day, combining to form date from a calendar-like-looking box. This data is generally needed and collected in applications tha
4 min read
Scaffold in Android using Jetpack Compose
Scaffold in Android Jetpack is a composable function that provides a basic structure of the layout. It holds together different parts of the UI elements such as Application bars, floating action buttons, etc. There are a lot of apps that contain TopAppBar, Drawer, Floating Action Button, BottomAppBa
3 min read
Snackbar in Android using Jetpack Compose
Snackbar is a lightweight widget and they are used to show messages at the bottom of the application. It was introduced with the Material Design library as a replacement for a Toast. In this article, we will explain how you can create a Snackbar using Jetpack Compose. Below is the sample picture to
4 min read
ProgressBar in Android using Jetpack Compose
ProgressBar is a material UI component in Android which is used to indicate the progress of any process such as for showing any downloading procedure, as a placeholder screen, and many more. In this article, we will take a look at the implementation of ProressBar in Android using Jetpack Compose. At
3 min read
Linkify in Android using Jetpack Compose
Linkify Class in Android Operating System is used to create user-clickable links from the Text on the basis of pattern matching and regex. In simple words, Linkify observes the text, finds out if a span or whole text is a type of pattern, and converts it into a clickable link. For example, if the te
3 min read
Torch App in Android using Jetpack Compose
Nowadays almost all mobile devices come with a flashlight that is used by the camera. Along with that, this same flashlight is also used as a torch on android devices. For using this flashlight there are many android applications named Torch to use this flashlight as a torch. In this article, we wil
2 min read