Как сослаться на ресурс в классе

140
20 ноября 2017, 17:36

Есть класс 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 как-то сослаться на ресурс

READ ALSO
Чтение arraylist с External storage

Чтение arraylist с External storage

Есть файл sampletxt во внешней памяти, у которого такая структура [Строка1, Строка2]

152
Как правильно проверить ЭП в Java?

Как правильно проверить ЭП в Java?

У меня есть 2 файла - файл подписи(PKCS7) и файл, который был этой подписью подписанМой вопрос заключается в том, как можно проверить, что подпись...

166
Google Maps API Zoom and bounds

Google Maps API Zoom and bounds

Добрый вечер! Как сделать фичу : получаю список меток с сервера и надо что бы камера перешла к нимНапример 2 метки - Москва и Питер и камера...

158
Задержка перед выполнением слушателя. Android

Задержка перед выполнением слушателя. Android

Необходимо немного оптимизировать запросы в приложении Android и разгрузить процессор

159