Я хочу создать действие, которое включает в себя androidx.media3.ui.playerview. Игрок должен воспроизводить видео, используя услугу переднего плана, что позволяет воспроизведению медиа продолжаться, даже когда приложение сводится к минимуму. Тем не менее, я хочу, чтобы игрок, сервис и его уведомление полностью прекратилось, когда называется метод деятельности Ondestroy () . https://developer.android.com/media/imp ... ayback-app, но я не уверен, как правильно остановить службу, когда это необходимо. class = "lang-xml prettyprint-override">
< /code>
PlaybackService, который я скопировал с разработчикаpublic class PlaybackService extends MediaSessionService {
private MediaSession mediaSession = null;
@OptIn(markerClass = UnstableApi.class)
@Override
public void onCreate() {
super.onCreate();
DataSource.Factory dataSourceFactory = ExoPlayerCache.getDataSourceFactory(this);
ExoPlayer player = new ExoPlayer.Builder(this)
.setMediaSourceFactory(new DefaultMediaSourceFactory(dataSourceFactory)) // for cache
.build();
//DefaultMediaNotificationProvider builder = new DefaultMediaNotificationProvider.Builder(this).build();
//ExoPlayer player = new ExoPlayer.Builder(this).build();
mediaSession = new MediaSession.Builder(this, player).build();
}
@Nullable
@Override
public MediaSession onGetSession(MediaSession.ControllerInfo controllerInfo) {
return mediaSession;
}
@Override
public void onDestroy() {
mediaSession.getPlayer().release();
mediaSession.release();
mediaSession = null;
super.onDestroy();
}
}
< /code>
в моей деятельности < /h2>
< /li>
< /ul>
public class ItemViewerActivity extends AppCompatActivity {
PlayerView playerView;
MediaController mediaController;
ListenableFuture controllerFuture;
// I think there’s an issue with my code in the onDestroy() method.
@Override
protected void onDestroy() {
if (playerView.getPlayer() != null){
playerView.getPlayer().release();
mediaController.releaseFuture(controllerFuture);
mediaController = null;
}
super.onDestroy();
}
@Override
protected void onStop() {
if (playerView.getPlayer() != null){
playerView.getPlayer().pause();
}
super.onStop();
}
@Override
protected void onPause() {
if (playerView.getPlayer() != null){
playerView.getPlayer().pause();
}
super.onPause();
}
@Override
protected void onResume() {
if (playerView.getPlayer() != null){
//player.play();
}
super.onResume();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_item_viewer);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
playerView = findViewById(R.id.playerView);
String finalVideoUrl = "videoUrl";
SessionToken sessionToken = new SessionToken(ItemViewerActivity.this, new ComponentName(ItemViewerActivity.this, PlaybackService.class));
controllerFuture = new MediaController.Builder(ItemViewerActivity.this, sessionToken).buildAsync();
controllerFuture.addListener(() -> {
// Call controllerFuture.get() to retrieve the MediaController.
// MediaController implements the Player interface, so it can be
// attached to the PlayerView UI component.
try {
mediaController = controllerFuture.get();
playerView.setPlayer(mediaController);
playerView.setControllerShowTimeoutMs(2000);
MediaItem mediaItem = MediaItem.fromUri(finalVideoUrl);
mediaController.setMediaItem(mediaItem);
mediaController.setRepeatMode(Player.REPEAT_MODE_OFF);
mediaController.prepare();
mediaController.play();
} catch (ExecutionException | InterruptedException e) {
Log.e(TAG, "onResponse: " + e.getMessage());
Toast.makeText(ItemViewerActivity.this, "Player Failed", Toast.LENGTH_SHORT).show();
}
}, MoreExecutors.directExecutor());
}
}
< /code>
manifest < /h2>
< /li>
< /ul>
< /code>
реализации < /h2>
< /li>
< /ul>
implementation("androidx.media3:media3-exoplayer:1.7.1")
implementation("androidx.media3:media3-exoplayer-dash:1.7.1")
implementation("androidx.media3:media3-ui:1.7.1")
implementation("androidx.media3:media3-session:1.7.1")
Подробнее здесь: https://stackoverflow.com/questions/796 ... hen-needed
Играть в СМИ на заднем плане и остановить его, когда это необходимо ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение