Загрузка данных
Без проблем. Ниже приведена пошаговая инструкция для этой практической работы.
Обратите внимание: в методичке на фото 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). Первое видео загрузится, после его окончания выскочит окно с выбором — повторить или включить следующее.