MediaPlayer Class in Android

26 Dec, 2020
MediaPlayer Class in Android is used to play media files. Those are Audio and Video files. It can also be used to play audio or video streams over the network. So in this article, the things discussed are:
MediaPlayer State diagram
Creating a simple audio player using MediaPlayer API. Have a look at the following image. Note that we are going to implement this project using the Kotlin language. 
The playing of the audio or video file using MediaPlayer is done using a state machine.
The following image is the MediaPlayer state diagram.
In the above MediaPlayer state diagram, the oval shape represents the state of the MediaPlayer instance resides in.
There are two types of arcs showing in the state diagram. One with the single arrowhead represents the synchronous method calls of the MediaPlayer instance and one with the double arrowhead represents the asynchronous calls.
The release method which is one of the important element in the MediaPlayer API. This helps in releasing the Memory resources allocated for the Mediaplayer instance when it is not needed anymore. Refer to How to Clear or Release Audio Resources in Android? to know how the memory allocated by the Mediaplayer can be released. So that the memory management is done accordingly.
If the stop() method is called using Mediaplayer instance, then it needs to prepared for the next playback.
The MediaPlayer can be moved to the specific time position using seekTo() method so that the MediaPlayer instance can continue playing the Audio or Video playback from that specified position.
The focus of the audio playback should be managed accordingly using the AudioManager service which is discussed in the article How to Manage Audio Focus in Android?.
The following image is the summarised version of the MediaPlayer state diagram.
Step 1: Create an empty activity project
Create an empty activity Android Studio project. And select Kotlin as a programming language.
Refer to Android | How to Create/Start a New Project in Android Studio? to know how to create an empty activity Android Studio project.
Step 2: Create a raw resource folder
Create a raw resource folder under the res folder and copy one of the .mp3 file extension.
Step 3: Working with the activity_main.xml file
The layout of the application consists of three buttons PLAY, PAUSE, and STOP mainly, which is used to control the state of the MediaPlayer instance.
Invoke the following code inside the activity_main.xml file to implement the UI.
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="match_parent"    tools:context=".MainActivity"    tools:ignore="HardcodedText">     <TextView        android:id="@+id/headingText"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_marginTop="32dp"        android:text="MEDIA PLAYER"        android:textSize="18sp"        android:textStyle="bold" />     <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_below="@id/headingText"        android:layout_marginTop="16dp"        android:gravity="center_horizontal">         <Button            android:id="@+id/stopButton"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginEnd="8dp"            android:backgroundTint="@color/colorPrimary"            android:text="STOP"            android:textColor="@android:color/white" />         <Button            android:id="@+id/playButton"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_marginEnd="8dp"            android:backgroundTint="@color/colorPrimary"            android:text="PLAY"            android:textColor="@android:color/white" />         <Button            android:id="@+id/pauseButton"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:backgroundTint="@color/colorPrimary"            android:text="PAUSE"            android:textColor="@android:color/white" />     </LinearLayout> </RelativeLayout>
 Output UI: 
Step 4: Working with the MainActivity.kt file 
The MediaPlayer instance needs the attributes needs to be set before playing any audio or video file.
Invoke the following inside the MainActivity.kt file. Comments are added for better understanding. 
Kotlin
import android.media.MediaPlayerimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.widget.Button class MainActivity : AppCompatActivity() {     override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)         // create an instance of mediplayer for audio playback        val mediaPlayer: MediaPlayer = MediaPlayer.create(applicationContext, R.raw.music)         // register all the buttons using their appropriate IDs        val bPlay: Button = findViewById(R.id.playButton)        val bPause: Button = findViewById(R.id.pauseButton)        val bStop: Button = findViewById(R.id.stopButton)         // handle the start button to          // start the audio playback        bPlay.setOnClickListener {            // start method is used to start              // playing the audio file            mediaPlayer.start()        }         // handle the pause button to put the        // MediaPlayer instance at the Pause state        bPause.setOnClickListener {            // pause() method can be used to            // pause the mediaplyer instance            mediaPlayer.pause()        }         // handle the stop button to stop playing        // and prepare the mediaplayer instance        // for the next instance of play        bStop.setOnClickListener {            // stop() method is used to completely            // stop playing the mediaplayer instance            mediaPlayer.stop()             // after stopping the mediaplayer instance            // it is again need to be prepared            // for the next instance of playback            mediaPlayer.prepare()        }    }}
adityamshidlyali
android
Technical Scripter 2020
Android
Kotlin
Technical Scripter
Android
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Android SDK and it's Components
Android RecyclerView in Kotlin
Android Project folder Structure
Broadcast Receiver in Android With Example
Navigation Drawer in Android
Android RecyclerView in Kotlin
Broadcast Receiver in Android With Example
Kotlin constructor
Kotlin Array
Android UI Layouts