Увеличьте или уменьшите громкость программно в Android с помощью Jetpack Compose

Опубликовано: 9 Января, 2023

Много раз при создании приложения для Android, например, с помощью аудиоплеера, например музыкального проигрывателя. Мы должны добавить функциональность, чтобы добавить регулятор громкости для нашего медиаплеера в наше приложение. Так что мы можем контролировать громкость нашего медиаплеера. В этой статье мы рассмотрим, как программно настроить громкость телефона Android в Android с помощью Jetpack Compose.

Пошаговая реализация

Шаг 1. Создайте новый проект в Android Studio.

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio». При выборе шаблона выберите «Пустая активность создания» . Если вы не найдете этот шаблон, попробуйте обновить Android Studio до последней версии. Мы продемонстрировали приложение на Kotlin, поэтому убедитесь, что вы выбрали Kotlin в качестве основного языка при создании нового проекта.

Шаг 2: Добавление нового цвета в файл Color.kt

Перейдите к приложению > java > имени пакета вашего приложения > ui.theme > файлу Color.kt и добавьте в него приведенный ниже код.

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)

Шаг 3: Работа с файлом MainActivity.kt

Перейдите к файлу MainActivity.kt и обратитесь к следующему коду. Ниже приведен код файла MainActivity.kt . Комментарии добавляются внутри кода, чтобы понять код более подробно.

Kotlin




package com.example.newcanaryproject
 
import android.content.Context
import android.content.Context.AUDIO_SERVICE
import android.media.AudioManager
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.platform.LocalContext
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.*
 
class MainActivity : ComponentActivity() {
 
    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 color picker method
                        volumeController(LocalContext.current)
                    }
                }
            }
        }
    }
}
 
@Composable
fun volumeController(context: Context) {
 
    // Declare an audio manager
    val audioManager = context.getSystemService(AUDIO_SERVICE) as AudioManager
     
    // on below line we are creating variables for
    // volume level, max volume, volume percent.
    val volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
    val maxVolumeLevel = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
    val volumePercent = (volumeLevel.toFloat() / maxVolumeLevel * 100).toInt()
     
    // on below line we are creating a variable
    // for current volume and initializing it.
    val currentVolume = remember {
        mutableStateOf(volumePercent)
    }
 
    // 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 below line we are displaying a
        // text as volume controller.
        Text(
            text = "Volume Controller",
            // on below line we are adding font weight
            fontWeight = FontWeight.Bold,
             
            // on below line we are adding font size.
            fontSize = 20.sp,
             
             // on below line we are adding text color.
            color = greenColor,
        )
 
        // on below line we are creating text to display volume level.
        Text(
            text = "Volume Level : " + currentVolume.value,
            // on below line we are adding font weight.
            fontWeight = FontWeight.Bold,
            // on below line we are adding font size and color.
            fontSize = 20.sp,
            color = greenColor
        )
 
        // on below line we are creating a row for buttons.
        Row(modifier = Modifier.padding(4.dp)) {
 
            // below line is use to create a button.
            Button(
                // below line is use to add onclick
                // parameter for our button onclick
                onClick = {
                    // on below line we are increasing our volume.
                    audioManager.adjustVolume(
                        AudioManager.ADJUST_RAISE,
                        AudioManager.FLAG_PLAY_SOUND
                    )
                    // on below line we are getting our current volume level.
                    val volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
                    val maxVolumeLevel = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
                    val volumePercent = (volumeLevel.toFloat() / maxVolumeLevel * 100).toInt()
                    currentVolume.value = volumePercent
                },
                // in below line we are using modifier
                // which is use to add padding to our button
                modifier = Modifier.padding(all = Dp(10F)),
 
                // below line is use to set or
                // button as enable or disable.
                enabled = true,
 
                // below line is use to
                // add border to our button.
                border = BorderStroke(width = 1.dp, brush = SolidColor(Color.Blue)),
 
                // below line is use to add shape for our button.
                shape = MaterialTheme.shapes.medium,
                // on below line we are updating color for our button.
                colors = ButtonDefaults.buttonColors(backgroundColor = greenColor),
            ) {
                // on below line we are adding text for our button.
                Text(text = "+")
            }
 
            // on below line we are adding a spacer.
            Spacer(modifier = Modifier.width(20.dp))
 
            // below line is use to create a button.
            Button(
                // below line is use to add onclick
                // parameter for our button onclick
                onClick = {
                    // on below line we are decreasing volume
                    audioManager.adjustVolume(
                        AudioManager.ADJUST_LOWER,
                        AudioManager.FLAG_PLAY_SOUND
                    )
                    // on below line we are getting our current volume level.
                    val volumeLevel = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
                    val maxVolumeLevel = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
                    val volumePercent = (volumeLevel.toFloat() / maxVolumeLevel * 100).toInt()
                    currentVolume.value = volumePercent
                },
 
                // on below line we are updating color for our button.
                colors = ButtonDefaults.buttonColors(backgroundColor = greenColor),
 
                // in below line we are using modifier
                // which is use to add padding to our button
                modifier = Modifier.padding(all = Dp(10F)),
 
                // below line is use to set or
                // button as enable or disable.
                enabled = true,
 
                // below line is use to
                // add border to our button.
                border = BorderStroke(width = 1.dp, brush = SolidColor(Color.Blue)),
 
                // below line is use to add shape for our button.
                shape = MaterialTheme.shapes.medium,
            ) {
                // on below line we are creating a text.
                Text(text = "-")
            }
        }
    }
}

Теперь запустите приложение, чтобы увидеть результат работы приложения.

Выход:

РЕКОМЕНДУЕМЫЕ СТАТЬИ