Android MediaPlayer How to Play Audio
- 2021-11-13 02:41:32
- OfStack
This paper mainly introduces the way of playing audio using MediaPlayer. For basic knowledge of MediaPlayer, such as state, refer to the basic introduction of Android MediaPlayer.
For convenience of expression, define the variable name mediaPlayer.
How to use MediaPlayer
Create MediaPlayer
It can be created directly by new MediaPlayer or by create method provided by MediaPlayer.
mediaPlayer = new MediaPlayer();
After successful creation using the create method, mediaPlayer is in the Prepared state. It can be played directly by start.
mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.fromFile(file));
mediaPlayer.start();
Setting Sound Source-setDataSource
Set the sound source by calling setDataSource. setDataSource has several overloaded methods. Let's look at some of the common ones.
For example, set up to use resources in assets. The actual situation may require try catch.
AssetFileDescriptor fd = null;
MediaPlayer mediaPlayer = new MediaPlayer();
fd = context.getApplicationContext().getAssets().openFd(name);
mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
Local file, the absolute path of the file is required.
mediaPlayer.setDataSource(file.getAbsolutePath());
Or get the Uri of the file to create mediaPlayer.
mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.fromFile(file));
Set up network audio, also use setDataSource method, set url.
mediaPlayer.setDataSource("https://demo.com/sample.mp3"));
When playing network audio, if you use http, you may report an error
java.io.IOException: Cleartext HTTP traffic to demo.com not permitted
You can simply set manifest under 1 and set
usesCleartextTraffic=”true”
<application
android:usesCleartextTraffic="true">
Ready-prepare
Prepare audio resources synchronously and asynchronously.
prepareAsync()
Is asynchronous, and prepare is synchronous. Pay attention to thread scheduling problems and do not block UI threads.
Prepare audio asynchronously, often with
MediaPlayer.OnPreparedListener
The listener is used together. Other settings can also be made when preparing asynchronously.
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start(); // Play it when you're ready
}
});
Loop Play-Looping
Set the loop to play setLooping.
mediaPlayer.setLooping(true);
After playing, OnCompletionListener will not be called back, but the current audio will be played from scratch.
Play-start
Play the audio and call the start method.
mediaPlayer.start();
When you are in the Prepared, Pause, and PlaybackComplete states, you can call the start method to enter the Started state.
Pause-pause
Pause playback and use the pause method. Before pausing, judge whether mediaPlayer is playing under 1.
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
If the pause is successful, it will be in Paused state.
Stop-stop
Looking back at the diagram of MediaPlayer state switching in 1, we can know that stop method can be called to enter Stopped state in three states: playing, pausing and playing completed.
mediaPlayer.stop();
Scheduling-seekTo
Adjust the playback progress. We usually use music playing software 1 will have this function.
The seekTo method accepts 1 millisecond parameter.
int targetMS = (int) (percent * mediaPlayer.getDuration());
mediaPlayer.seekTo(targetMS);
seekTo does not change the state of MediaPlayer.
int targetMS = (int) (percent * mediaPlayer.getDuration());
mediaPlayer.seekTo(targetMS);
mediaPlayer after reset enters Idle state. Need to reset the sound source and prepare.
Release-release
When this mediaPlayer is no longer used, it should be released as soon as possible to free up related resources.
After calling release, mediaPlayer enters End state. At this time, this mediaPlayer can no longer be used.
Common listener
Buffer Listener OnBufferingUpdateListener
For example, when we load network audio, we often use this listener to monitor the buffer progress. Displaying buffer progress can also improve the user experience.
AssetFileDescriptor fd = null;
MediaPlayer mediaPlayer = new MediaPlayer();
fd = context.getApplicationContext().getAssets().openFd(name);
mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
0
Error Listener OnErrorListener
AssetFileDescriptor fd = null;
MediaPlayer mediaPlayer = new MediaPlayer();
fd = context.getApplicationContext().getAssets().openFd(name);
mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
1
Note the return value of onError. You can choose to handle error yourself.
AssetFileDescriptor fd = null;
MediaPlayer mediaPlayer = new MediaPlayer();
fd = context.getApplicationContext().getAssets().openFd(name);
mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
2
Finished Play Listener OnCompletionListener
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
// Play finished
}
});
Use sample
Play audio from assets
Play the audio files in assets and use the AssetFileDescriptor class. Remember to turn off AssetFileDescriptor after use.
AssetFileDescriptor fd = null;
MediaPlayer mediaPlayer = new MediaPlayer();
fd = context.getApplicationContext().getAssets().openFd(name);
mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
4
Play local audio files
Try playing an audio file. Play only once.
AssetFileDescriptor fd = null;
MediaPlayer mediaPlayer = new MediaPlayer();
fd = context.getApplicationContext().getAssets().openFd(name);
mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
5
Play audio online
Set url to play online audio
AssetFileDescriptor fd = null;
MediaPlayer mediaPlayer = new MediaPlayer();
fd = context.getApplicationContext().getAssets().openFd(name);
mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
6
The code can refer to the sample project: https://github.com/RustFisher/android-MediaPlayer
Summarize