Здравствуйте, сегодня создадим на Android Studio более сложный аудиоплеер – со шкалой времени, в данном плеере будет показано время с начала проигрывания аудио трека, а также время до его окончания.
Скачать исходники для статьи можно ниже
Начала аналогично как и по предыдущей статье, когда мы создавали самый простой двухкнопочный аудиоплеер:
Создадим вот такой Аудиоплеер со шкалой времени:
1. Создаем новый проект в Android Studio:
Я выбрал платформу Android 4.0 – для того чтобы наше будущее приложение запускалось на версиях Андроида – Android 4.0+
Выбираем шаблон Empty Activity (Пустое Активити):
Далее оставляем все по умолчанию:
И жмем на кнопку Finish.
2. Редактируем файл activity_main.xml
Переходим в папку res, в ней в подпапку layout и жмем на файл – activity_main.xml, далее открываем вкладку Text (Текст):
И здесь добавляем кнопку, шкалу времени и три текстовые зоны (будет показано время в милесекундах, а также в обычных минутах и секундах до окончания песни и с начала проигрывания песни) в “Аудиоплеер”, вот такой код файла activity_main.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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="mnogoblog.ru.myaudioplayer.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Мой аудиоплеер!" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="252dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView" />
</LinearLayout>
<SeekBar
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar"/>
<Button
android:text="@string/play_str"
android:textSize="15pt"
android:textStyle="bold"
android:onClick="playAndStop"
android:id="@+id/ButtonPlayStop"
android:layout_width="420dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginRight="-3dp"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView3" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
Если перейти на вкладку “Design” (Дизайн) увидим как будет выглядеть наше будущее приложение:
3. Редактируем файл MainActivity
Далее переходим в файл MainActivity:
Заменяем код на следующий:
package mnogoblog.ru.myaudioplayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
private Button buttonPlayStop;
private MediaPlayer mediaPlayer;
private SeekBar seekBar;
private TextView textView1;
private TextView textView2;
private TextView textView3;
private double finalTime = 0;
private double finalTime2 = 0;
private final Handler handler = new Handler();
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_main);
initViews();
}
private void initViews() {
buttonPlayStop = (Button) findViewById(R.id.ButtonPlayStop);
mediaPlayer = MediaPlayer.create(this, R.raw.mymusic);
seekBar = (SeekBar) findViewById(R.id.seekBar);
seekBar.setMax(mediaPlayer.getDuration());
seekBar.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
seekChange(v);
return false;
}
});
textView1 = (TextView) findViewById(R.id.textView1);
textView2 = (TextView) findViewById(R.id.textView2);
textView3 = (TextView) findViewById(R.id.textView3);
}
public void startPlayProgressUpdater() {
seekBar.setProgress(mediaPlayer.getCurrentPosition());
if (mediaPlayer.isPlaying()) {
Runnable notification = new Runnable() {
public void run() {
startPlayProgressUpdater();
}
};
handler.postDelayed(notification,1000);
}else{
mediaPlayer.pause();
buttonPlayStop.setText(getString(R.string.play_str));
}
String text = seekBar.getProgress() + " из " + seekBar.getMax();
textView1.setText(text);
finalTime = seekBar.getProgress();
textView2.setText(String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long)
finalTime)))
);
finalTime2 = seekBar.getMax() - finalTime;
textView3.setText(String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes((long) finalTime2),
TimeUnit.MILLISECONDS.toSeconds((long) finalTime2) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long)
finalTime2)))
);
}
private void seekChange(View v) {
if(mediaPlayer.isPlaying()){
SeekBar sb = (SeekBar) v;
mediaPlayer.seekTo(sb.getProgress());
} else {
SeekBar sb = (SeekBar) v;
mediaPlayer.seekTo(sb.getProgress());
finalTime = seekBar.getProgress();
textView2.setText(String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes((long) finalTime),
TimeUnit.MILLISECONDS.toSeconds((long) finalTime) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long)
finalTime)))
);
finalTime2 = seekBar.getMax() - finalTime;
textView3.setText(String.format("%d min, %d sec",
TimeUnit.MILLISECONDS.toMinutes((long) finalTime2),
TimeUnit.MILLISECONDS.toSeconds((long) finalTime2) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long)
finalTime2)))
);
}
}
public void playAndStop(View v){
if (buttonPlayStop.getText() == getString(R.string.play_str)) {
buttonPlayStop.setText(getString(R.string.pause_str));
try{
mediaPlayer.start();
startPlayProgressUpdater();
}catch (IllegalStateException e) {
mediaPlayer.pause();
}
}else {
buttonPlayStop.setText(getString(R.string.play_str));
mediaPlayer.pause();
}
}
}
Здесь в 38 строчке мы указали на имя аудиофайла, в данном примере – это mymusic.
4. Редактируем файл – strings.xml
Заходим res, в подпапку values и кликаем по файлу strings.xml
И заменяем на следующий код:
<resources>
<string name="app_name">Myaudioplayer</string>
<string name="play_str">PLAY</string>
<string name="pause_str">PAUSE</string>
</resources>
5. Загружаем аудиофайл.
Осталось загрузить аудиофайл, для этого нужно создать папку raw и загрузить в неё какой-нибудь mp3 файл с именем mymusic.
Для этого наводим курсор мыши на папку res и кликаем правой кнопкой мыши, открывается менюшка – выбираем в ней пункт New, и подпункт Directory – и создаем новую папочку с именем raw:
И у нас появилась новая папочка raw – наводим на неё курсор мышки и кликаем правой кнопкой, открывается меню – выбираем в ней пункт Show in Explorer:
после чего у нас откроется папочка, в которой заходим в папку raw и закачиваем туда mp3 с названием mymusic – можете скачать данный файл с моего сайта!
6. Создаем apk файл.
Теперь нам нужно создать apk файл для загрузки на Android устройства – для этого выбираем в верхнем меню пункт “Build”, подпункт “Build Apk”
Через некоторое время появится вот такое сообщение справа вверху:
Жмем на ссылку и у нас открывается папочка с apk файлом по имени
app-debug.apk
Можете переименовать файл, например в mypleer.apk и загрузить к себе на смартфон, установить и запустить приложение.
На этом все классных вам Android приложений!

