Я хочу создать действие, которое включает в себя 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
Форум для тех, кто программирует под Android
-
Anonymous
1754386941
Anonymous
Я хочу создать действие, которое включает в себя androidx.media3.ui.playerview. Игрок должен воспроизводить видео, используя услугу переднего плана, что позволяет воспроизведению медиа продолжаться, даже когда приложение сводится к минимуму. Тем не менее, я хочу, чтобы игрок, сервис и его уведомление полностью прекратилось, когда называется метод деятельности Ondestroy () . https://developer.android.com/media/implement/playback-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")
Подробнее здесь: [url]https://stackoverflow.com/questions/79657160/playing-media-in-the-background-and-stop-it-when-needed[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия