Есть класс RadioPlayer, который реализует класс для проигрывания и остановки плеера. Используется ExoPlayer. Как сослаться в этом классе на R.id.player. У меня в этом классе в строке RadioPlayer.simpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.player); ошибка компиляции. Можно отнаследовать класс от AppCompatActivity, но тогда у меня другая ошибка т.к. метод статический, то пишет что findViewById нельзя использовать в статик методах. А метод мне нужен статический, чтобы вызывать его в сервисе
public class RadioPlayer {
static BandwidthMeter bandwidthMeter;
static TrackSelector trackSelector;
static SimpleExoPlayer player;
static LoopingMediaSource loopingSource;
public static SimpleExoPlayerView simpleExoPlayerView;
public static void startPlayer(String url, Context context) {
if (player != null) {
player.stop();
}
Handler mainHandler = new Handler();
bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
trackSelector = new DefaultTrackSelector( videoTrackSelectionFactory);
LoadControl loadControl = new DefaultLoadControl();
player = ExoPlayerFactory.newSimpleInstance(context, trackSelector, loadControl);
RadioPlayer.simpleExoPlayerView = new SimpleExoPlayerView(context);
RadioPlayer.simpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.player);
simpleExoPlayerView.setUseController(true);
simpleExoPlayerView.requestFocus();
simpleExoPlayerView.setPlayer(player);
Uri streamUri = Uri.parse(url);
DefaultBandwidthMeter bandwidthMeterA = new DefaultBandwidthMeter();
DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(context, Util.getUserAgent(context, "caucasusradios"), bandwidthMeterA);
ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
MediaSource mediaSource = new ExtractorMediaSource(streamUri, dataSourceFactory, extractorsFactory, null, null);
loopingSource = new LoopingMediaSource(mediaSource);
player.prepare(loopingSource);
player.setPlayWhenReady(true);
player.addListener(new Player.EventListener() {
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
}
@Override
public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) {
}
@Override
public void onLoadingChanged(boolean isLoading) {
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
}
@Override
public void onRepeatModeChanged(int repeatMode) {
}
@Override
public void onPlayerError(ExoPlaybackException error) {
player.stop();
player.prepare(loopingSource);
player.setPlayWhenReady(true);
}
@Override
public void onPositionDiscontinuity() {
}
@Override
public void onPlaybackParametersChanged(PlaybackParameters playbackParameters) {
}
});
}
public static void stopPlayer() {
player.stop();
}
}
Мне пришлось сделать SimpleExoPlayerView статическим и в классе PlayerActivity в методе onCreate сделать так
RadioPlayer.simpleExoPlayerView = new SimpleExoPlayerView(this);
RadioPlayer.simpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.player);
но вроде нельзя делать ресурсы статическими. Поэтому хотелось бы сделать SimpleExoPlayerView и в классе RadioPlayer как-то сослаться на ресурс
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники