/
ap1k
/
MultimediaJavaAndroid
Обзор
Документация
Войти
/
ap1k
/
MultimediaJavaAndroid
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/src/main/java/com/example/multimedia/VideoPlayerActivity.java
271 строка
9 KB
Roman
Full proj
11 май 2025, 13:58
11 май 2025, 13:58
4ffd117
Код
Авторство
О чём код?
package com.example.multimedia; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.view.View; import android.widget.MediaController; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; import android.widget.VideoView; import androidx.appcompat.app.AppCompatActivity; import com.google.android.material.floatingactionbutton.FloatingActionButton; public class VideoPlayerActivity extends AppCompatActivity { private VideoView videoView; private TextView tvVideoCurrentTime, tvVideoTotalTime; private SeekBar seekBarVideo; private FloatingActionButton fabPlayVideo, fabPauseVideo, fabStopVideo; private Handler handler = new Handler(Looper.getMainLooper()); private Runnable runnable; // Sample video resource private static final String VIDEO_SAMPLE = "comp1"; private int currentPosition = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video_player); // Initialize views videoView = findViewById(R.id.videoView); tvVideoCurrentTime = findViewById(R.id.tvVideoCurrentTime); tvVideoTotalTime = findViewById(R.id.tvVideoTotalTime); seekBarVideo = findViewById(R.id.seekBarVideo); fabPlayVideo = findViewById(R.id.fabPlayVideo); fabPauseVideo = findViewById(R.id.fabPauseVideo); fabStopVideo = findViewById(R.id.fabStopVideo); // Setup video view setupVideoView(); // Setup button click listeners fabPlayVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { playVideo(); } }); fabPauseVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { pauseVideo(); } }); fabStopVideo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { stopVideo(); } }); // Setup SeekBar change listener seekBarVideo.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser) { videoView.seekTo(progress); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { pauseVideo(); } @Override public void onStopTrackingTouch(SeekBar seekBar) { playVideo(); } }); } /** * Setup the VideoView with the video resource */ private void setupVideoView() { try { // Get the resource ID int rawId = getResources().getIdentifier(VIDEO_SAMPLE, "raw", getPackageName()); if (rawId == 0) { // Ресурс не найден Toast.makeText(this, "Видеофайл " + VIDEO_SAMPLE + " не найден. Пожалуйста, убедитесь, что файл находится в res/raw директории.", Toast.LENGTH_LONG).show(); disableVideoControls(); return; } // Set the video path Uri videoUri = Uri.parse("android.resource://" + getPackageName() + "/" + rawId); videoView.setVideoURI(videoUri); // Добавим MediaController для стандартного управления видео MediaController mediaController = new MediaController(this); mediaController.setAnchorView(videoView); videoView.setMediaController(mediaController); // Setup completion listener videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { stopVideo(); } }); // Setup prepared listener to get video duration videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { int totalDuration = videoView.getDuration(); seekBarVideo.setMax(totalDuration); tvVideoTotalTime.setText(formatTime(totalDuration)); } }); // Обработка ошибок videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { Toast.makeText(VideoPlayerActivity.this, "Ошибка воспроизведения видео: " + what, Toast.LENGTH_LONG).show(); disableVideoControls(); return true; // Ошибка обработана } }); } catch (Exception e) { Toast.makeText(this, "Ошибка при настройке видеоплеера: " + e.getMessage(), Toast.LENGTH_LONG).show(); disableVideoControls(); } } /** * Disable video controls when video is not available */ private void disableVideoControls() { fabPlayVideo.setEnabled(false); fabPauseVideo.setEnabled(false); fabStopVideo.setEnabled(false); seekBarVideo.setEnabled(false); tvVideoCurrentTime.setText("0:00"); tvVideoTotalTime.setText("0:00"); } /** * Play the video */ private void playVideo() { try { if (!videoView.isPlaying()) { videoView.start(); updateSeekBar(); } } catch (Exception e) { Toast.makeText(this, "Ошибка воспроизведения: " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } /** * Pause the video */ private void pauseVideo() { try { if (videoView.isPlaying()) { videoView.pause(); currentPosition = videoView.getCurrentPosition(); handler.removeCallbacks(runnable); } } catch (Exception e) { Toast.makeText(this, "Ошибка при паузе: " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } /** * Stop the video */ private void stopVideo() { try { videoView.stopPlayback(); videoView.resume(); currentPosition = 0; handler.removeCallbacks(runnable); seekBarVideo.setProgress(0); tvVideoCurrentTime.setText("0:00"); setupVideoView(); } catch (Exception e) { Toast.makeText(this, "Ошибка при остановке: " + e.getMessage(), Toast.LENGTH_SHORT).show(); } } /** * Update the SeekBar position and current time text */ private void updateSeekBar() { try { // Get current position currentPosition = videoView.getCurrentPosition(); // Update SeekBar and current time text seekBarVideo.setProgress(currentPosition); tvVideoCurrentTime.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); } @Override protected void onPause() { super.onPause(); if (videoView != null && videoView.isPlaying()) { pauseVideo(); } } @Override protected void onDestroy() { super.onDestroy(); if (handler != null && runnable != null) { handler.removeCallbacks(runnable); } } }