- Android Play Local / URL Audio With ProgressBar Example
- 1. Play Audio In Android Steps.
- 2. Show Audio Progress While Playing.
- 3. Play Android Audio Example.
- 3.1 Play local audio file example.
- 3.2 Play web URL audio file example.
- ProgressBar — Индикатор прогресса
- Основы
- Стилизация
- Индикатор с текстом
- Анимация ObjectAnimator
- Дополнительное чтение
- How to show seekbar with media player
- Leave a Comment Cancel Reply
- 30 comments
Android Play Local / URL Audio With ProgressBar Example
This article will show you how to play audio files from local files or web URL files in android programmatically. It also shows how to display audio playing progress in a progress bar.
1. Play Audio In Android Steps.
- android.media.MediaPlayer class is used to play android audio files. You should follow the below steps to use it.
- Create a new instance of MediaPlayer.
- If you want to play music from a web URL, because it is streaming audio then you need to set the audio stream type.
- Call MediaPlayer‘s setDataSource(Uri uri) method to set the audio file URI or path ( local file path or web URL).
- Call the MediaPlayer object’s prepare() method to prepare.
- Call the MediaPlayer object’s start, pause, stop, release, seekTo, isPlaying, getDuration method as you need.
- When the activity is destroyed, do not forget to release the MediaPlayer object by it’s release method.
- You should declare the below permissions in the AndroidManifest.xml file to play local or URL audio. Otherwise, java.io.IOException may be thrown.
2. Show Audio Progress While Playing.
- Use android.widget.ProgressBar component to display audio file playing progress.
- To do this, you need to create an android.os.Handler object in activity main thread, it’s responsibility is to listen to the main thread message queue and pick up the update-progress ( child thread sent ) messages. Then update the progress bar as required.
- Because Android does not allow update UI control in child thread directly, so we have to create a child thread that sends an update-progress message to the main thread message queue every one second.
- Then every one second, the progress bar handler in the activity main thread will get a message from the child thread and then update the audio progress bar as needed.
3. Play Android Audio Example.
3.1 Play local audio file example.
If you can not watch the above video, you can see it on the youtube URL https://youtu.be/VFecRoR5DmM
- The above video shows an example that plays a local audio file on an Android emulator.
- First, you need to use the android device monitor to push the mp3 file into the android emulator. You can read the article Android Device Monitor Cannot Open Data Folder Resolve Method to learn more.
- If you can not open the folder ( where you want to save the mp3 file such as /storage/emulated/0/Music) in the android device monitor, run the command adb root in dos window, then you get root permission to upload the mp3 file to the folder.
3.2 Play web URL audio file example.
Источник
ProgressBar — Индикатор прогресса
Основы
Компонент ProgressBar (Индикатор прогресса) применяется в тех случаях, когда пользователю нужно показать, что программа не зависла, а выполняет продолжительную работу.
Находится в категории Widgets.
Студия предлагает несколько видов индикаторов: ProgressBar и ProgressBar (Horizontal). В свою очередь компонент имеет несколько модификаций и их отличия заложены в стилях, если посмотреть XML-описание компонентов. Стили постоянно меняются, поэтому проще выбрать атрибут style и посмотреть предлагаемые варианты из выпадающего списка на текущий момент.
Методы для работы с ProgressBar:
- setProgress() — устанавливает заданное значение индикатора прогресса;
- getProgress() — возвращает текущее значение индикатора прогресса;
- incrementProgressBy() — устанавливает величину дискретизации приращения значения индикатора;
- setMax() — устанавливает максимальное значение величины прогресса.
Круговые индикаторы Normal, Small и Large можно просто разместить на экране, и они будут бесконечно выводить анимацию вращения без единой строчки кода.
Как правило, «бесконечный» индикатор выводят в нужный момент, а когда задача выполнена, то его скрывают. Видимость можно установить через XML и программно.
В коде используется метод setVisibility()
Сейчас проекты в студии используют Material Design, поэтому цвет индикатора будет соответствовать ресурсу colorAccent.
Можно переопределить цвет, если вы хотите отказаться от этой связи с colorAccent, задав свой стиль.
Подключаем через тему.
Другая настройка связана с Tint — оттенками цвета (Android 5.0).
Стилизация
Если вам не нравится внешний вид стандартных индикаторов, то можете придумать свой. Есть два варианта для реализации этой цели. В первом случае можно подготовить готовый png-файл (spin_custom.png) и поместить его в ресурс, например, в папку res/drawable.
Затем в этой же папке создаём xml-файл spinner_png.xml с таким содержанием:
Теперь в разметке активности можно определять ProgressBar так:
Если запустить проект, то увидим такой индикатор:
В реальности индикатор выглядит немного корявым, подёргиваясь на экране. Кроме того, изображение можно улучшить, уменьшив количество цветов и сократив размер файла.
Второй вариант выглядит предпочтительней. На этот раз мы обойдёмся без графических файлов, а будем использовать только XML-разметку. В этой же папке поместим файл spinner_ring.xml следующего содержания:
Теперь в разметке активности пропишем строки:
Получим следующий результат:
Индикатор с текстом
К сожалению, индикатор не выводит текст во время работы, что не очень удобно. Можно создать свой ProgressBar из TextView или создать свой компонент на основе ProgressBar. Другой простой способ — наложить текстовый блок прямо на индикатор, используя RelativeLayout. Пример для пояснения.
Код, чтобы увидеть работу индикатора. При каждом щелчке кнопки значение индикаторов увеличиваются на 10 процентов.
Индикаторы прогресса также можно использовать в заголовках приложения у старых устройств, а также в ActionBar и ToolBar у новых устройств.
Компонент постоянно дорабатывается. Например, в Android 8 появились новые методы isAnimating(), getMin(), setMin().
Анимация ObjectAnimator
Можно подключить готовую анимацию для визуализации компонента.
Дополнительное чтение
Material ProgressBar — статья про создание собственного индикатора в стиле Material Design
Indeterminate — серия статей на тему создания индикаторов прогресса, ссылка на первую часть.
Источник
How to show seekbar with media player
What is a SeekBar? Well according to android.developers.com, A SeekBar is an extension of ProgressBar that adds a draggable thumb. The user can touch the thumb and drag left or right to set the current progress level or use the arrow keys. Placing focusable widgets to the left or right of a SeekBar is discouraged. You must have seen a bar with your media player (audio or video). It helps you to navigate to a certain time of the audio or video you are using.
We are going to check that how we can achieve this in Android.
If you are not aware of the media player class then you can follow the below provided links to learn how to play the audios in your android app.
Let us begin with adding seek bar with your media player object.
We are gonna assume that you have you already have a Mediaplayer object initialized with your media. Now we will have to set the max value for the seek bar with the duration of the media file
and we need a handler which will constantly update the seek bar according to the media player object with the help of a Runnable. We are using this because only the main thread can update the UI.
the above handler updates the seek after every 50ms. You can change this time according to your requirement.
Now we have to call this handler when the audio starts to play. The below code segment shows how to do this.
and on pause, you can remove the callback.
The above process connects the seek bar to the media player but it will not seek the media player yet. For this, you will have to set an OnSeekBarChangeListener which will use the MediaPlayer’s seekTo function and seek the media file to a particular time.
this will seek to the position where ever the seek bar pointer is. The check fromUser is must otherwise it will keep seeking the media player on every second and the media output will come with some disturbance or lag.
That’s all you need to do to get a smoothly working SeekBar.
Thank you very much. This is Vedesh Kumar signing off.
Leave a Comment Cancel Reply
30 comments
Will it be possible for you to post your code here? So that we can have a look.
i am getting such error
java.lang.NullPointerException: Attempt to invoke virtual method ‘void android.widget.SeekBar.setProgress(int)’ on a null object reference
at com.example.video69.Activityfiles$1.run(Activityfiles.java:43)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5525)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.SeekBar;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity <
MediaPlayer mediaPlayer;
AudioManager audioManager;
Handler mSeekbarUpdateHandler;
Runnable mUpdateSeekbar;
public void play(View view) <
mediaPlayer.start();
mSeekbarUpdateHandler.postDelayed(mUpdateSeekbar, 0);
>
public void pause(View view) <
mediaPlayer.pause();
mSeekbarUpdateHandler.removeCallbacks(mUpdateSeekbar);
>
@Override
protected void onCreate(Bundle savedInstanceState) <
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mediaPlayer = MediaPlayer.create(this, R.raw.demosong);
SeekBar volumeControl = (SeekBar) findViewById(R.id.volumeSeekBar);
final SeekBar songControl = (SeekBar) findViewById(R.id.songSeekBar);
songControl.setMax(mediaPlayer.getDuration());
volumeControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() <
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) <
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, i,0);
>
@Override
public void onStartTrackingTouch(SeekBar seekBar) <
@Override
public void onStopTrackingTouch(SeekBar seekBar) <
songControl.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() <
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) <
mediaPlayer.seekTo(i);
>
@Override
public void onStartTrackingTouch(SeekBar seekBar) <
@Override
public void onStopTrackingTouch(SeekBar seekBar) <
Источник