Загрузка данных


Без проблем. Ниже приведена пошаговая инструкция для этой практической работы.

Обратите внимание: в методичке на фото 2 код написан на языке Java, но там есть странная строка MainActivity.kt/.java. Так как код в методичке на Java, я подготовил для вас именно Java-код. При создании проекта выбирайте язык Java.

Вот что нужно сделать поэтапно:

Шаг 1: Создайте новый проект

1. В Android Studio нажмите File -> New -> New Project.
2. Выберите шаблон Empty Views Activity.
3. Назовите проект (например, VideoPlayerDemo), язык выберите Java, нажмите Finish.

---

Шаг 2: Добавьте зависимости

1. В левой панели проекта перейдите в папку Gradle Scripts и откройте файл build.gradle.kts (Module :app).
2. Прокрутите вниз до блока dependencies { ... }.
3. Внутри этого блока добавьте следующий код (точь-в-точь как на фото):

```kotlin
    val exoplayerVersion = "1.6.1"
    // Core ExoPlayer library
    implementation("androidx.media3:media3-exoplayer:$exoplayerVersion")
    // Common utilities (recommended)
    implementation("androidx.media3:media3-common:$exoplayerVersion")
    // UI components
    implementation("androidx.media3:media3-ui:$exoplayerVersion")
    // DASH support
    implementation("androidx.media3:media3-exoplayer-dash:$exoplayerVersion")
    // HLS support
    implementation("androidx.media3:media3-exoplayer-hls:$exoplayerVersion")
    // Smooth Streaming support
    implementation("androidx.media3:media3-exoplayer-smoothstreaming:$exoplayerVersion")
    // Optional: Extractor (for progressive formats like MP4, MP3)
    implementation("androidx.media3:media3-exoplayer-rtsp:$exoplayerVersion")
```

4. В правом верхнем углу нажмите Sync Now (или значок слоника), чтобы Android Studio скачал нужные библиотеки.

---

Шаг 3: Добавьте разрешение в манифест

1. Откройте файл app > manifests > AndroidManifest.xml.
2. Перед тегом <application ... > добавьте строку:

```xml
<uses-permission android:name="android.permission.INTERNET" />
```

---

Шаг 4: Настройте интерфейс (activity_main.xml)

1. Откройте app > res > layout > activity_main.xml.
2. Переключитесь в режим Code (вкладка справа сверху).
3. Полностью замените весь код на следующий:

```xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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"
    tools:context=".MainActivity">

    <androidx.media3.ui.PlayerView
        android:id="@+id/player_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>
```

---

Шаг 5: Напишите логику (MainActivity.java)

1. Откройте app > java > com.example... > MainActivity.java.
2. Полностью замените код на следующий (я убрал комментарии //, как вы и просили, но оставил структуру кода с фото):

```java
package com.example.videoplayerdemo; // ВАЖНО: Убедитесь, что здесь ваше имя пакета, указанное при создании проекта!

import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import androidx.media3.common.MediaItem;
import androidx.media3.common.Player;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.ui.PlayerView;

import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private PlayerView playerView;
    private ExoPlayer player;

    private final List<String> videoUrls = Arrays.asList(
            "https://videos.pexels.com/video-files/2519660/2519660-sd_640_360_24fps.mp4",
            "https://videos.pexels.com/video-files/2023708/2023708-sd_360_640_30fps.mp4",
            "https://videos.pexels.com/video-files/3629511/3629511-sd_360_450_24fps.mp4"
    );

    private int currentVideoIndex = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        playerView = findViewById(R.id.player_view);
        initializePlayer();
    }

    private void initializePlayer() {
        player = new ExoPlayer.Builder(this).build();
        playerView.setPlayer(player);

        setVideo(videoUrls.get(currentVideoIndex));

        player.addListener(new Player.Listener() {
            @Override
            public void onPlaybackStateChanged(int playbackState) {
                if (playbackState == Player.STATE_ENDED) {
                    showCompletionDialog();
                }
            }
        });
    }

    private void setVideo(String url) {
        MediaItem mediaItem = MediaItem.fromUri(url);
        player.setMediaItem(mediaItem);
        player.prepare();
        player.play();
    }

    private void showCompletionDialog() {
        AlertDialog dialog = new AlertDialog.Builder(this)
                .setTitle("Playback Finished!")
                .setMessage("Want to replay or play next video?")
                .setIcon(R.mipmap.ic_launcher)
                .setPositiveButton("Replay", (dialogInterface, i) -> {
                    player.seekTo(0);
                    player.play();
                })
                .setNegativeButton("Next", (dialogInterface, i) -> {
                    currentVideoIndex = (currentVideoIndex + 1) % videoUrls.size();
                    setVideo(videoUrls.get(currentVideoIndex));
                })
                .create();

        dialog.show();
    }

    @Override
    protected void onStop() {
        super.onStop();
        player.release();
    }
}
```

---

Перевод всплывающего окна (на будущее)

В коде есть текст диалогового окна. Вот его перевод, если захотите заменить английский на русский (в коде оставьте кавычки):

· "Playback Finished!" — Воспроизведение завершено!
· "Want to replay or play next video?" — Хотите повторить или включить следующее видео?
· "Replay" — Повторить
· "Next" — Далее

После вставки кода запустите приложение (кнопка Run). Первое видео загрузится, после его окончания выскочит окно с выбором — повторить или включить следующее.