создать радио приложение для андроид

Онлайн радио для Android: пошаговое руководство

Авторизуйтесь

Онлайн радио для Android: пошаговое руководство

Рассказывает Николай Коломийцев, технический директор и Android-разработчик LevelTop.org

Привет, типичные! В этом руководстве расскажу вам о том, как создать свое приложение в Android.

Начну сразу с сути, поэтому определимся с функционалом:

С требованиями разобрались, теперь самое сложное интересное — реализация.

Весь код вы можете найти на GitHub, здесь же я уделю внимание только основным моментам.

Думаю, что SDK у вас установлено и новые проекты вы создавать умеете, поэтому создадим пустой (blank) проект и добавим библиотеки в build.gradle:

Теперь коротко пройдемся по классам:

Также добавим пару layout-файлов для шторки и главного экрана, drawables можно найти здесь:

И добавим нашему Manifest несколько разрешений и служб:

Теперь давайте получим ключ Last.fm API, он нужен нам для того, чтобы по имени исполнителя найти его фотографию и показать ее на главном экране. Для этого нужно перейти на страницу создания аккаунта и войти или зарегистрироваться, после чего вам потребуется создать приложение. Эта операция займет 30 секунд, и мы наконец доберемся до API KEY, его вам нужно ввести в поле LAST_FM_KEY класса Const.java:

Далее предлагаю перейти к способу получения ссылки на прямую трансляцию, ее я беру отсюда. Для этого нам нужно запустить радио и, нажав правой кнопкой мыши в Chrome, выбрать пункт «посмотреть код», после чего выбрать вкладку Network и найти ссылку с самым длинным timeline. Это и будет наш стрим, он уже добавлен в класс Const — аналогичным способом я получил ссылку на HTML-страницу с именем исполнителя и названием трека. В этом коде много костылей, так как парсить HTML — это само по себе странное занятие, но все же я постараюсь его объяснить:

Здесь вы можете видеть получаемый мною нужный фрагмент HTML-страницы:

А это его парсинг, надеюсь, что комментарии будут информативны:

Этот пример кода, вполне возможно, не является лучшей практикой, но все приложение было написано ночью за несколько часов. Парсинг HTML — занятие сложное, и если есть возможность его не использовать, то нужно этой возможностью пользоваться. Надеюсь, мой опыт обработки HTML-страницы кому-то окажется полезным.

Далее парсинг JSON и получение фото пользователя.

Вот пример отправляемого Last.fm JSON-ответа для певицы Adele:

Все, что нас с вами здесь интересует — это изображение размера «mega», парсить мы его будем таким образом:

Теперь немного об ExoPlayer, и почему я не использовал стандартный MediaPlayer. MediaPlayer абсолютно не оптимизирован для таких нагрузок и частенько останавливал трансляцию. Также на старых (старше пятой) версиях Android перемотка, которую я собирался добавить позже, работает так, как будто плеер подгружает всю аудио дорожку между текущим положением и выбранным пользователем. После недолгих поисков выбор пал на ExoPlayer, сейчас коротко опишу его возможности, код ниже можно использовать как отдельный элемент в своем проекте:

Финальный этап урока — это уведомление в шторке, сервис и то, каким образом это работает.

Из главного Activity при начале проигрывания аудио мы запускаем сервис, и он берет всю работу на себя, освобождая работу в Activity. Выглядит это так:

Сервис управляется с помощью Intent. Когда пользователь нажимает на кнопку «play / pause» в шторке, сервис отправляет Intent сам себе и обрабатывает его, так мы отправляем Intent при нажатии:

Поздравляю! Мы разработали клиент-серверное приложение с использованием дополнительных библиотек, воспроизведением аудио, а также работой с сервисами. В конечном итоге получится нечто подобное тому, что вы видите на скриншотах:

Источник

Как я создавал приложение для прослушивания интернет радио

Итак, доброго времени суток, дамы и господа! Сегодня мы рассмотрим историю о том, как я создавал приложение для прослушивания интернет радио.

Первая версия программы была сделана ужасно и выглядела так:

создать радио приложение для андроид. image loader. создать радио приложение для андроид фото. создать радио приложение для андроид-image loader. картинка создать радио приложение для андроид. картинка image loader.

Сделал её когда опыта программирования и знаний было немного очень мало. Программа написана на C#, проект типа Windows Forms. О существовании WPF я знал, но толком в нем не разбирался. Программа создана просто – перетаскал на форму PictureBox-ы, поставил кнопку Play/Pause, Label-ы, ListBox, а полосу регулирования громкости скачал с CodeProject, подключил библиотеку Windows Media Player.

Код приложения – это сплошные проверки “if”. Знаю, руки бы мне за такое оторвать! Например, событие происходящее при нажатии на кнопку Play:

if (isPlaying == true)
<
try
<
wmp.controls.stop();
MainButton.BackgroundImage = Properties.Resources.play;
isPlaying = false;
label1.Text = wmp.currentPlaylist.Item[0].name;
if (Properties.Settings.Default.Theme == «Orange»)
<
PlayState.BackgroundImage = Image.FromFile(«Skins/Orange/PlayingSmall_Playing.png»);
>
else if (Properties.Settings.Default.Theme == «Aqua»)
<
PlayState.BackgroundImage = Image.FromFile(«Skins/Aqua/PlayingSmall_Playing.png»);
>
else if (Properties.Settings.Default.Theme == «Red»)
<
PlayState.BackgroundImage = Image.FromFile(«Skins/Red/PlayingSmall_Playing.png»);
>
>
catch
<
MessageBox.Show(«Возникла непредвиденная ошибка.Отсутсвует интернет подключение.\nПроверьте интернет подключение или перезапустите приложение», «Ошибка»);
>
>
else if (isPlaying == false)
<
try
<
wmp.controls.play();
MainButton.BackgroundImage = Properties.Resources.pause;
isPlaying = true;
label1.Text = wmp.currentPlaylist.Item[0].name;
if (Properties.Settings.Default.Theme == «Orange»)
<
PlayState.BackgroundImage = Image.FromFile(«Skins/Orange/PlayingSmall_Pause.png»);
>
else if (Properties.Settings.Default.Theme == «Aqua»)
<
PlayState.BackgroundImage = Image.FromFile(«Skins/Aqua/PlayingSmall_Pause.png»);
>
else if (Properties.Settings.Default.Theme == «Red»)
<
PlayState.BackgroundImage = Image.FromFile(«Skins/Red/PlayingSmall_Pause.png»);
>
>
catch
<
MessageBox.Show(«Возникла непредвиденная ошибка.Отсутсвует интернет подключение.\nПроверьте интернет подключение или перезапустите приложение», «Ошибка»);
>
>

Или проверка изменения радиостанции:

try
<
if (RadioListView.SelectedItems[0].Text == «EuropaPlus»)
<
wmp.URL = «http://cast.radiogroup.com.ua:8000/europaplus»;
wmp.controls.play();
Properties.Settings.Default.LastRadio = «http://cast.radiogroup.com.ua:8000/europaplus»;
label1.Text = wmp.currentPlaylist.Item[0].name;
Properties.Settings.Default.Save();
>
else if (RadioListView.SelectedItems[0].Text == «Наше Радио»)
<
wmp.URL = «http://cast.radiogroup.com.ua:8000/nashe»;
wmp.controls.play();
Properties.Settings.Default.LastRadio = «http://cast.radiogroup.com.ua:8000/nashe»;
label1.Text = wmp.currentPlaylist.Item[0].name;
Properties.Settings.Default.Save();
>
……

Мало того код ужасный, плюс ещё имеется один большой недостаток, а именно, если какая-то радиостанция уйдёт в небытие, то её никак не убрать из программы, разве что подправить код и заново скомпилировать.

Но об этом я тогда даже не задумывался, так как радовался, что сделал, наверное, что-то стоящее и интересное.

Прошло некоторое время. Я учился программировать, экспериментировал. Очередной раз, когда задался вопросом «что бы ещё программировать?» я наткнулся на проект этого убогого радио и решил, что надо переписать программу надо сделать версию получше.

Создал новый проект Windows Forms. Поставил на форму кнопку, пару Label-ов, TabControl, ListBox, тот же самый Slider. Добавил новое окно настроек. Воспроизведение происходит по-прежнему с помощью библиотеки Windows Media Player.

Теперь уже событие клика кнопки Play/Pause выглядит так:

if (!isPlaying)
<
play.BackgroundImage = Properties.Resources.play;
isPlaying = true;
player.controls.pause();
>
else if (isPlaying)
<
play.BackgroundImage = Properties.Resources.pause;
isPlaying = false;
player.controls.play();
>

Загрузка радиостанций идёт из xml файла. То есть теоретически каждый желающий сможет добавить неограниченное количество радиостанций. Структура xml файла:

EuropaPlus
Наше Радио
Premium
EuropaPlus2
RRadio
Kazantip
Kiss FM
Radio Record
Horizon FM
Best FM
Abc Christmas

А вот и код который загружает радиостанции в ListBox:

string fileName = «stations.xml»;

public void LoadStations()
<
if (File.Exists(fileName))
<
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fileName);
XmlNodeList stationNodes = xmlDoc.SelectNodes(«//stations/station»);
foreach (XmlNode stationNode in stationNodes)
<
string name = stationNode.InnerText;
//FullList – это listbox
FullList.Items.Add(name);
>
xmlDoc.Save(fileName);
>
else
<
MessageBox.Show(«Не найдены радиостанции.Увы мой господин.\nНе судьба!Загрузите их с сайта разработчика или переустановите программу.»);
>
>

Вот что в итоге получилось:

создать радио приложение для андроид. image loader. создать радио приложение для андроид фото. создать радио приложение для андроид-image loader. картинка создать радио приложение для андроид. картинка image loader.

Этому результату я был очень рад.

Опять пролетело какое-то время. Я научился делать приложения для Windows Phone и, соответственно, уже понимал что-то в WPF.
И вот теперь наступает, на мой взгляд, самая интересная часть этой статьи.

Совсем недавно я встретил программу плеер VK – Meridian. Дизайн этой программы мне очень понравился. И тут я задался вопросом: «Почему бы не сделать программу Radio с таким же дизайном, ну или хотя бы что-то подобное?». К тому же был выложен исходник этой программы, которую я попытался изучить. Но сначала ничего дельного из этого не вышло. Пришлось искать. Поискав в google, наткнулся на статью на хабре. Скачал проект.

Создал новый проект WPF. Для приведения окна в желаемый вид добавил в проект скачанные файлы и привязал стиль к главному окну приложения. Поменял цвет окна, расположение значка, добавил новую кнопку “always on top” и вот что в итоге получилось:

создать радио приложение для андроид. image loader. создать радио приложение для андроид фото. создать радио приложение для андроид-image loader. картинка создать радио приложение для андроид. картинка image loader.

Для того, чтобы приложение было удобным и функциональным, решил разделить главное окно на 3 части. В первой части будут типы радиостанций, во второй список радиостанций относящиеся к определенному типу и, наконец, в третьей части будет логотип радиостанции. Стиль кнопки play/pause, volume, settings, listbox и scrollbar взял из исходников того самого Meridian Vk player.

После долгих мучений был получен такой код:

Источник

Как мы сделали приложение онлайн-радио для Android

создать радио приложение для андроид. 1432510137 1601846862. создать радио приложение для андроид фото. создать радио приложение для андроид-1432510137 1601846862. картинка создать радио приложение для андроид. картинка 1432510137 1601846862.

создать радио приложение для андроид. m2793801 1680086216. создать радио приложение для андроид фото. создать радио приложение для андроид-m2793801 1680086216. картинка создать радио приложение для андроид. картинка m2793801 1680086216.

Ответ на пост «Не знал что погода так много весит»

Из цикла «Прилетают как-то инопланетяне», 1996-2017

Прилетают как-то инопланетяне.

И тут я не нашел, что им ответить.

создать радио приложение для андроид. 1635867915231220070. создать радио приложение для андроид фото. создать радио приложение для андроид-1635867915231220070. картинка создать радио приложение для андроид. картинка 1635867915231220070.

создать радио приложение для андроид. m1112109 1323386138. создать радио приложение для андроид фото. создать радио приложение для андроид-m1112109 1323386138. картинка создать радио приложение для андроид. картинка m1112109 1323386138.

создать радио приложение для андроид. 16205628112974303. создать радио приложение для андроид фото. создать радио приложение для андроид-16205628112974303. картинка создать радио приложение для андроид. картинка 16205628112974303.

Рассказ о разработке 4x стратегии

Всем привет. Мы ведем разработку пошаговой стратегии командой энтузиастов и недавно посетили выставку разработчиков, после которой нас пригласили на ряд интервью. Хотелось поделиться рассказом о нашем проекте и устройстве команды с сегодняшнего стрима у xyz. Может нашим подписчикам будет интересно)

Для тех, кто не смотрит видео оставлю общее описание тут:

Более подробное описание:

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

Задача игрока, помимо классических действий для 4X, будет заключаться в предвосхищении событий, подготовке и нахождению одного из способов пережить подобные потрясения. Ну а в качестве бонуса однажды в новой сессии можно будет встретить руины своей же бывшей цивилизации и спрятанные там подсказки. Таким образом, эти события отражаются и на игроках, и на мире игры, включая животных и монстров, которые существуют в достаточном количестве. В конечном итоге, ваша фракция либо совершит технологический скачек в одном из трех направлений (магия, технологии или военное дело), либо будет уничтожена, как и во всех предыдущих циклах.

Если рассматривать проект глобально, то наиболее уникальным является влияние действий и принятых решений игрока на свою фракцию. У вас нет заранее подготовленных пресетов, вы вольны пойти в любую часть карты и начать строить там свое любимое королевство, а в случае изменения условий, начать меняться под них. Например, если вы уже пошли в стимпанк-развитие, то на чём будет ездить ваша ратуша, на гусеницах или на колёсах? Будет ли она работать на угле или электричестве? И на всё это с самого начала оказывает дополнительное влияние регион, в котором вы поселились.

Менее глобальные особенности связаны с героями и юнитами. Первые обладают комбинируемыми классами, имеют систему взаимоотношений между собой, от которых зависят доступные действия на карте. Вплоть до того, что герои из противоборствующих фракций, будучи друзьями, не будут вступать в бой между собой. Или помогать в нейтральных сражениях. И наоборот.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *