/
ap1k
/
MultimediaJavaAndroid
Обзор
Документация
Войти
/
ap1k
/
MultimediaJavaAndroid
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/src/main/java/com/example/multimedia/AudioPlayerActivity.java
241 строка
8 KB
Roman
Full proj
11 май 2025, 13:58
11 май 2025, 13:58
4ffd117
Код
Авторство
О чём код?
package com.example.multimedia; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.view.View; import android.widget.ImageView; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.google.android.material.floatingactionbutton.FloatingActionButton; public class AudioPlayerActivity extends AppCompatActivity { private TextView tvTrackTitle, tvCurrentTime, tvTotalTime; private SeekBar seekBarAudio; private FloatingActionButton fabPlayAudio, fabPauseAudio, fabStopAudio; private ImageView ivTrackCover; private MediaPlayer mediaPlayer; private Handler handler = new Handler(Looper.getMainLooper()); private Runnable runnable; // Sample tracks (can be replaced with actual tracks) private final int[] trackResources = { R.raw.track1 }; private final String[] trackTitles = { "Summer Breeze" }; private final int[] trackCovers = { R.drawable.cover1 }; private int currentTrackIndex = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_audio_player); // Initialize views tvTrackTitle = findViewById(R.id.tvTrackTitle); tvCurrentTime = findViewById(R.id.tvCurrentTime); tvTotalTime = findViewById(R.id.tvTotalTime); seekBarAudio = findViewById(R.id.seekBarAudio); fabPlayAudio = findViewById(R.id.fabPlayAudio); fabPauseAudio = findViewById(R.id.fabPauseAudio); fabStopAudio = findViewById(R.id.fabStopAudio); ivTrackCover = findViewById(R.id.ivTrackCover); // Setup the media player setupMediaPlayer(); // Setup the track info updateTrackInfo(); // Setup button click listeners fabPlayAudio.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { playAudio(); } }); fabPauseAudio.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { pauseAudio(); } }); fabStopAudio.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { stopAudio(); } }); // Setup SeekBar change listener seekBarAudio.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (mediaPlayer != null && fromUser) { mediaPlayer.seekTo(progress); } } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); } /** * Setup the MediaPlayer with the current track */ private void setupMediaPlayer() { // Release if already exists if (mediaPlayer != null) { mediaPlayer.release(); } try { // Create new MediaPlayer mediaPlayer = MediaPlayer.create(this, trackResources[currentTrackIndex]); if (mediaPlayer == null) { Toast.makeText(this, "Не удалось загрузить аудиофайл", Toast.LENGTH_SHORT).show(); finish(); return; } // Setup the total time display int totalDuration = mediaPlayer.getDuration(); seekBarAudio.setMax(totalDuration); tvTotalTime.setText(formatTime(totalDuration)); // Setup completion listener mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { stopAudio(); } }); } catch (Exception e) { Toast.makeText(this, "Ошибка при инициализации аудиоплеера: " + e.getMessage(), Toast.LENGTH_SHORT).show(); finish(); } } /** * Play the audio track */ private void playAudio() { if (mediaPlayer != null && !mediaPlayer.isPlaying()) { try { mediaPlayer.start(); updateSeekBar(); } catch (Exception e) { Toast.makeText(this, "Ошибка воспроизведения: " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } } /** * Pause the audio track */ private void pauseAudio() { if (mediaPlayer != null && mediaPlayer.isPlaying()) { try { mediaPlayer.pause(); handler.removeCallbacks(runnable); } catch (Exception e) { Toast.makeText(this, "Ошибка приостановки: " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } } /** * Stop the audio track */ private void stopAudio() { if (mediaPlayer != null) { try { mediaPlayer.stop(); mediaPlayer.reset(); setupMediaPlayer(); handler.removeCallbacks(runnable); seekBarAudio.setProgress(0); tvCurrentTime.setText("0:00"); } catch (Exception e) { Toast.makeText(this, "Ошибка остановки: " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } } /** * Update the SeekBar position and current time text */ private void updateSeekBar() { if (mediaPlayer != null) { try { // Get current position int currentPosition = mediaPlayer.getCurrentPosition(); // Update SeekBar and current time text seekBarAudio.setProgress(currentPosition); tvCurrentTime.setText(formatTime(currentPosition)); // Continue updating runnable = new Runnable() { @Override public void run() { updateSeekBar(); } }; handler.postDelayed(runnable, 1000); } catch (Exception e) { // Игнорируем ошибку } } } /** * Format milliseconds to m:ss format */ private String formatTime(int milliseconds) { int seconds = milliseconds / 1000; int minutes = seconds / 60; seconds = seconds % 60; return String.format("%d:%02d", minutes, seconds); } /** * Update the track title and cover image */ private void updateTrackInfo() { tvTrackTitle.setText(trackTitles[currentTrackIndex]); ivTrackCover.setImageResource(trackCovers[currentTrackIndex]); } @Override protected void onDestroy() { super.onDestroy(); if (mediaPlayer != null) { handler.removeCallbacks(runnable); mediaPlayer.release(); mediaPlayer = null; } } }