Играть в СМИ на заднем плане и остановить его, когда это необходимоJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Играть в СМИ на заднем плане и остановить его, когда это необходимо

Сообщение Anonymous »

Я хочу создать действие, которое включает в себя 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Играть в СМИ на заднем плане и остановить его, когда это необходимо
    Anonymous » » в форуме JAVA
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Играть в СМИ на заднем плане и остановить его, когда это необходимо
    Anonymous » » в форуме Android
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Играть в СМИ на заднем плане и остановить его, когда это необходимо
    Anonymous » » в форуме Android
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Играть в СМИ на заднем плане и остановить его, когда это необходимо
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Играть в СМИ на заднем плане и остановить его, когда это необходимо
    Anonymous » » в форуме Android
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»