Как создать виджет музыкального плеера для exoplayer?

Я сделал приложение, которое использует exoplayer для потоковой передачи музыки в формате mp3. Все работает нормально, кроме добавления виджета музыкального проигрывателя на панель уведомлений и экран блокировки. Я много искал и нашел несколько сообщений в блогах, предлагающих использовать медиа-сеанс. Но я новичок в этой концепции. Может кто-нибудь, пожалуйста, помогите мне с подключением exoplayer к MediaSession, а также с созданием виджета с его использованием.

Даже если вы не используете mediasession, пожалуйста, подскажите, как создать музыкальный виджет из приложения с помощью exoplayer. Ссылки на коды git или образцы кода были бы действительно полезны.

Вот мой код активности playmusic, методы в нем я вызываю из Homeactivity.

public class PlayMusic {
    private static SimpleExoPlayer mp;
    private static Handler mainHandler;
    private static RenderersFactory renderersFactory;
    private static BandwidthMeter bandwidthMeter;
    private static LoadControl loadControl;
    private static DataSource.Factory dataSourceFactory;
    private static ExtractorsFactory extractorsFactory;
    private static MediaSource mediaSource;
    private static TrackSelection.Factory trackSelectionFactory;
    private static TrackSelector trackSelector;
    private AudioManager audioManager;
    private static final int BUFFER_SEGMENT_SIZE = 128 * 1024;
    private static final int BUFFER_SEGMENT_COUNT = 1024;
    public static final String channel_url = "http://ibadat.out.airtime.pro:8000/ibadat_a";
    public static void preparePlayingSound(Context con, String url) {
        renderersFactory = new DefaultRenderersFactory(con);
        bandwidthMeter = new DefaultBandwidthMeter();
        trackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter);
        trackSelector = new DefaultTrackSelector(trackSelectionFactory);
        loadControl = new DefaultLoadControl();
        mp = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector, loadControl);
        dataSourceFactory = new DefaultDataSourceFactory(con, "ExoplayerDemo");
        extractorsFactory = new DefaultExtractorsFactory();
        mainHandler = new Handler();
        mediaSource = new ExtractorMediaSource(Uri.parse(url),
                dataSourceFactory,
                extractorsFactory,
                mainHandler,
                null);
        mp.prepare(mediaSource);
    }
    public static void startPlayingSound(Context con) {

        if (mp != null && mp.getPlayWhenReady())
        {

        } else {
            mp.setPlayWhenReady(true);
            mp.setVolume(1f);

        }
    }
    //and to stop it use this method below
    public static boolean checkStatus(Context con) {
        Boolean flag = false;
        if (mp != null && mp.getPlayWhenReady()) {
            flag = true;
        } else {
            flag = false;
        }
        return flag;
    }
    public static void stopPlayingSound(Context con) {
        if (mp != null && mp.getPlayWhenReady()) {
            mp.stop();
            mp.release();
            mp = null;
        } else {
        }
    }







    public static void setVolume(Context context,Float volume)
    {
        mp.setVolume(volume);
    }


}

person Nabil Mohammed Nalakath    schedule 20.11.2017    source источник


Ответы (1)


Согласно рекомендациям по вводу-выводу Android, использование MediaSession - один из лучших способов потоковой передачи музыки на различные устройства. Они предоставляют образец проекта с его реализацией, а также все, что вы просили об использовании Exo Player в следующем ссылка. Для уведомлений и проигрывателя LockScreen обратитесь к классу MediaNotificationManger в приведенной выше ссылке.

person Abilash    schedule 20.11.2017