PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Рабочий журнал (http://pccar.ru/forumdisplay.php?f=25)
-   -   ВАЗ 21093 + SmartQ K7 (android) (http://pccar.ru/showthread.php?t=19285)

ifynk 08.01.2014 17:24

Цитата:

Сообщение от s.m. (Сообщение 282608)
А что делает такого таскер?
Если будет постоянно висящий сервис (а с оболочкой именно так и есть), то нафиг таскер не нужен, все можно замутить в самом сервисе.

Таскер только отслеживает появление/пропадание зарядки. Раньше PowerAmp запускался и останавливался по питанию и все. А сейчас он просто по времени подсветку ставит. Все это я могу и сам реализовать.

ifynk 08.01.2014 17:27

Цитата:

Сообщение от s.m. (Сообщение 282608)
А чем не нравится висящая панелька, как у меня? Много места не занимает, висит себе поверх любой проги, выводить туда можно что угодно.

Ну основное то, что я хочу подучить пограммирование под android. Потом у меня свой протокол обмена данными между приложением и teensy. Да и все это через BT, а не через порт работает. Также мне сам интерфейс и не нужен в основном, проще с пульта управлять часто используемыми операциями. Все остальное android и так предоставляет.

ifynk 08.01.2014 17:30

Цитата:

Сообщение от s.m. (Сообщение 282608)
интересно, сам думал добавить интернет-радио себе в оболочку, руки не дошли пока...
В основном душит жаба платить за интернет, а также сомнения, как добавить нужный поток в удобном виде (и где взять его так, чтобы не спалили через ределю), фиксированную привязку к чужому сервису не хочу (у них семь пятниц на неделе). Много гемора в итоге... С обычным радио намного проще - включил и работает.

Тут мне проще. Я эфирное радио вообще не слушаю. Забил фиксированный список самых любимых станций в приложение и все. Интернет по $0.13 в день не особо по карману бъет.

s.m. 08.01.2014 18:38

Цитата:

Сообщение от ifynk (Сообщение 282612)
Забил фиксированный список самых любимых станций в приложение и все.

вот с этого места поподробнее плз...
как получить ссылку на радиостанцию, чем ее потом играть и т.д.
Там я знаю идет поток потом MP3 или AAC, но как прямую ссылку на поток получить, чтобы сервис вещания не обиделся потом?

ifynk 08.01.2014 18:49

Ну я на сайте di.fm выбрал нужную станцию. Для нее указал нужный мне формат - mp3 и тип плеера winamp. В результате я получил плейлист в котором указаны ссылки на нужный мне канал (например http://pub1.di.fm:80/di_darkdnb). Выбрал любую ссылку и прописал ее в коде. Вот и все. А играю поток стандартным mediaplayer. Если честно, то я не совсем понял суть вашей проблемы.

ifynk 08.01.2014 18:52

Цитата:

Сообщение от s.m. (Сообщение 282628)
Там я знаю идет поток потом MP3 или AAC, но как прямую ссылку на поток получить, чтобы сервис вещания не обиделся потом?

Не понял смысл фразы "чтобы сервис вещания не обиделся потом" :dntknw:

s.m. 08.01.2014 18:58

Цитата:

Сообщение от ifynk (Сообщение 282631)
Не понял смысл фразы "чтобы сервис вещания не обиделся потом" :dntknw:

имелось в виду всякие защиты от использования потока, если они есть.
и еще клево иметь метаинфу, что играет в данный момент.

ifynk 08.01.2014 19:01

Цитата:

Сообщение от s.m. (Сообщение 282634)
имелось в виду всякие защиты от использования потока, если они есть.
и еще клево иметь метаинфу, что играет в данный момент.

Все равно не пойму. Откуда возьмется защита? Или вам нужен канал, который только платный, а хочеться просто так?

Метаданные добавлю тоже. Уже пытался их получить, но сразу не завелось. Поищу в инете еще решения, но пока забил на это.

kristal0211 08.01.2014 21:56

ifynk, вот какое-то решение, но не пробовал работу.
http://anton.logvinenko.name/ru/blog...yu-python.html
Код:

#!/usr/bin/env python
import urllib2
stream_url = 'http://pub1.di.fm/di_classictrance'
request = urllib2.Request(stream_url)
try:
    request.add_header('Icy-MetaData', 1)
    response = urllib2.urlopen(request)
    icy_metaint_header = response.headers.get('icy-metaint')
    if icy_metaint_header is not None:
        metaint = int(icy_metaint_header)
        read_buffer = metaint+255
        content = response.read(read_buffer)
        title = content[metaint:].split("'")[1]
        print title
except:
    print 'Error'


s.m. 08.01.2014 23:51

Цитата:

Сообщение от kristal0211 (Сообщение 282658)
ifynk, вот какое-то решение, но не пробовал работу.
http://anton.logvinenko.name/ru/blog...yu-python.html
Код:

#!/usr/bin/env python
import urllib2
stream_url = 'http://pub1.di.fm/di_classictrance'
request = urllib2.Request(stream_url)
try:
    request.add_header('Icy-MetaData', 1)
    response = urllib2.urlopen(request)
    icy_metaint_header = response.headers.get('icy-metaint')
    if icy_metaint_header is not None:
        metaint = int(icy_metaint_header)
        read_buffer = metaint+255
        content = response.read(read_buffer)
        title = content[metaint:].split("'")[1]


        print title
except:
    print 'Error'


Нафига челу питон, если он на жаве пишет. Там тоже ничего сложного - аж 2способа гугл предлагает для сетевых запросов. Но это оффтоп здесь

kristal0211 10.01.2014 09:11

Долго искал чем же стримить DI.fm станции. И понял что лучше всех с этим справляется Xiialive pro. Интерфейс хорош, прост в использовании да и процесс добавления станций легок. Тупо вводишь URL и все. Он сам подтягивает название станции, жанр и самое главное во время воспроизведения выводятся автоматом данные о текущем исполнителе. И это без каких-либо шаманств.

ifynk 10.01.2014 13:21

Цитата:

Сообщение от kristal0211 (Сообщение 282841)
Долго искал чем же стримить DI.fm станции. И понял что лучше всех с этим справляется Xiialive pro. Интерфейс хорош, прост в использовании да и процесс добавления станций легок. Тупо вводишь URL и все. Он сам подтягивает название станции, жанр и самое главное во время воспроизведения выводятся автоматом данные о текущем исполнителе. И это без каких-либо шаманств.

Проблемы в выборе софта и небыло никогда. Меня полностью устраивало родное приложение для di.fm. Проблема была в том, что сторонними приложениями я не могу управлять через свой сервис.

s.m. 10.01.2014 13:27

Цитата:

Сообщение от ifynk (Сообщение 282861)
Проблема была в том, что сторонними приложениями я не могу управлять через свой сервис.

Даже через посылку интентов? У меня та же проблема - сторонние проги не имеют нормального апи для управления. Вот и думаю, не замутить ли просто импорт плейлиста в радио, тогда радио будет пофиг, что играть, хардварное или онлайн-радио, только непонятки с мета-инфой, как ее получение унифицировать.
Зы, может замутить отдельную ветку про прослушивание онлайн-радио под Андроидом: кто что чем слушает? Влом как-то лопатить интернет для этого.

kristal0211 10.01.2014 13:59

Цитата:

Сообщение от s.m. (Сообщение 282862)
Даже через посылку интентов? У меня та же проблема - сторонние проги не имеют нормального апи для управления. Вот и думаю, не замутить ли просто импорт плейлиста в радио, тогда радио будет пофиг, что играть, хардварное или онлайн-радио, только непонятки с мета-инфой, как ее получение унифицировать.
Зы, может замутить отдельную ветку про прослушивание онлайн-радио под Андроидом: кто что чем слушает? Влом как-то лопатить интернет для этого.

хорошая идея.

ifynk 10.01.2014 14:43

Цитата:

Сообщение от s.m. (Сообщение 282862)
Даже через посылку интентов? У меня та же проблема - сторонние проги не имеют нормального апи для управления.

Даже через интенты не работает. Там прикол в том, что если приложение не предполагает прием интентов от сторонних приложений, то добраться к ним не получится из-за политики безопасности android. В poweramp есть возможность принимать интенты от сторонних приложений, а вот для приложения di.fm такое не проканало, хотя у меня был исходный код этого приложения и я знал, через какие интенты активити общается с сервисом.

ifynk 10.01.2014 14:54

Цитата:

Сообщение от s.m. (Сообщение 282862)
только непонятки с мета-инфой, как ее получение унифицировать.

Насколько я разобрался, то есть два вида медиа метаданных - IceCast и ShotCast. Вроди как android должен понимать icecast, но через стандартный metadataretriiver у меня не получлось что либо получить. Есть в инете уже готовая библиотека, которая умеет работать с этими типами метаданных, но для меня она показалась сильно громоздкой. Скорее всего напишу свою простую библиотеку, которая будет парсить данные из icecast.

kristal0211 10.01.2014 14:58

Может я немного не понял, а чего вы добивайтесь? чем управлять? В чем проблема выбрать список избранных станций, ввести в тот-же Xiialive pro. Из под него читается вся инфа о текущей станции. А если хочется управления через тот же рабочий стол с выводом той же инфы. То наверное можно данные с помощью catloga какого-нибудь слизать и реализовать с помощью таскера.
Вот это по подробней можно расшифровать.
Цитата:

Проблема была в том, что сторонними приложениями я не могу управлять через свой сервис.

ifynk 10.01.2014 16:23

Цитата:

Сообщение от kristal0211 (Сообщение 282874)
Может я немного не понял, а чего вы добивайтесь? чем управлять? В чем проблема выбрать список избранных станций, ввести в тот-же Xiialive pro. Из под него читается вся инфа о текущей станции. А если хочется управления через тот же рабочий стол с выводом той же инфы. То наверное можно данные с помощью catloga какого-нибудь слизать и реализовать с помощью таскера.
Вот это по подробней можно расшифровать.

Нужно внимательней посты читать. Мне нужна возможность управлять аудио и радио через IR пульт. А вообще я хочу сделать так, чтобы все работало именно так, как я хочу, а этого можно добиться только используя свой софт. Написать свой софт для меня не проблема, так почему бы и нет?

Кстати Xiialive тоже имеет свой API и должна быть возможность управлять им через интенты (это вдруг кому нужно будет).

s.m. 10.01.2014 18:43

Цитата:

Сообщение от ifynk (Сообщение 282873)
Насколько я разобрался, то есть два вида медиа метаданных - IceCast и ShotCast. Вроди как android должен понимать icecast, но через стандартный metadataretriiver у меня не получлось что либо получить. Есть в инете уже готовая библиотека, которая умеет работать с этими типами метаданных, но для меня она показалась сильно громоздкой. Скорее всего напишу свою простую библиотеку, которая будет парсить данные из icecast.

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

ifynk 11.01.2014 19:08

Добавил в радио функционал по получению мета данных. Оказалось все не сложно. В первый пост выложил ссылку на исходники оболочки, может кому поможет чем-то.

lti1 11.01.2014 20:04

ifynk, по поводу регулировки громкости pioneer'ом, у Вас рулевой пульт универсальный (у меня такой же) в него можно прописать коды кнопок громкости от пульта pioneer и не заморачиваться с Wired remote, если конечно Ваша магнитола работает с ик пультом.


Если магнитола не работает с ик пультом, то её наверняка можно доработать, ссылка 1, ссылка 2.

s.m. 11.01.2014 20:18

Цитата:

Сообщение от ifynk (Сообщение 283031)
Добавил в радио функционал по получению мета данных. Оказалось все не сложно. В первый пост выложил ссылку на исходники оболочки, может кому поможет чем-то.

спс за исходники, но структура папок доставляет...
Картинки внутри папки src это нечто. Ну если Android studio так делает...
Это не в упрек, просто диковато выглядит после эклипса.

Как раз задумался о добавлении интернет-радио к себе в оболочку, это сильно ускорит процесс, хотя я уже и так все придумал. У меня радио будет универсальным, то бишь в кучу фм и сетевые станции, хочешь такие слушай, хочешь такие. По-моему, это удобно с точки зрения листания станций кнопками туда-сюда. Хоть в сети есть и локальные фм-станции, но в отсуствии тырнета можно будет послушать фм.

А вот и МТС у нас подоспел со своими недорогими расценками на интернет для радио и клонированием симок... Сорри за оффтоп.


Посмотрел немного код, позволю себе некоторые мелкие советы:

1. Избегайте, плз, "magic numbers", то есть аццких констант в коде типа 1784778242, такие вещи надо выносить.
2. Ну и удобно использовать шаблоны типа фабрика, чтобы не было кода, как здесь

if (st == AM_SOURCE_AUDIOPLAYER) {
mPowerAmp.stop();
}
else {
mStreamRadio.stop();
}

То есть делаете 2 класса с одинаковым интерфейсом.
А потом при инициализации обьекта просто выбираете нужный класс и дергаете методы унифицированно.
Это будет офигенно просто потом добавить 3,4,5 источник или еще один плеер (ну мало ли), не надо будет переколбашивать кучу написанного кода и, что самое геморное, регрессно тестить ВЕСЬ предыдущий код.

3. Все строковые константы в Андроиде принято держать в strings.xml, тогда локализация приложения будет заключаться только в добавлении файла с новым языком.

ifynk 11.01.2014 20:50

Спасибо за советы. Вы все правильно говорите, но это код на быструю руку и сейчас стоит цель сделать, чтоб работало.

1. Не совсем понял по замечанию, куда и что выносить? В константы?
2. Сам стараюсь так делать, но пока рановато все выносить в абстрактные классы, так как еще не весь функционал утвержден. Еще на старом проекте iShell под Windows на Delphi так организовывал Music/Video Player.
3. Тоже перенесу все со временем.

Кстати структура папок таки проделки Android Studio.

s.m. 11.01.2014 21:03

Цитата:

Не совсем понял по замечанию, куда и что выносить? В константы?
да, в константы, так код более читаем и поддерживаем.

Цитата:

3. Тоже перенесу все со временем.
лучше сразу делать, войдет в привычку, будет легче.

ifynk 13.01.2014 12:28

Цитата:

Сообщение от lti1 (Сообщение 283034)
ifynk, по поводу регулировки громкости pioneer'ом, у Вас рулевой пульт универсальный (у меня такой же) в него можно прописать коды кнопок громкости от пульта pioneer и не заморачиваться с Wired remote, если конечно Ваша магнитола работает с ик пультом.


Если магнитола не работает с ик пультом, то её наверняка можно доработать, ссылка 1, ссылка 2.

Спасибо. Это как последний вариант подойдет. Просто прикол в том, что магнитола находится высоко от пульта и вариант через проводной пульта мне кажется более производительным, так как свой ИК приемник я могу расположить как угодно.

lti1 13.01.2014 20:19

Цитата:

Сообщение от ifynk (Сообщение 283188)
Просто прикол в том, что магнитола находится высоко от пульта и вариант через проводной пульта мне кажется более производительным, так как свой ИК приемник я могу расположить как угодно.

Пульт все равно работает на отражение от водителя, и по моим ощущениям такой как у Вас гораздо мощнее чем родной pioneer'овский.
ИМХО просто через Teensy и Wired remote как то сложно получается, зачем городить что-то дополнительно если магнитола сама умеет обрабатывать ИК.

ifynk 19.01.2014 18:34

Всем привет. Обращаюсь за помощью к знатокам. Расковырял свой 3G-WiFi модем. В батарее 4 контакта. На каждом разное напряжение. Причем плюсовой только 1, а 3 остальные минусовые. Подал питание на крайние контакты - модуль запустился, WIFI ловит, но к инету не подключается. Возможно сам 3G модуль питается отдельно от WiFi модуля. Эксперементировать дальше не стал, так как не хочется спалить модем. Как поступить в таком случае? Можно ли тупо замкнуть все минусовые контакты между собой?

AndyWasHere 20.01.2014 08:31

Там термодатчик на каких-то контактах висит. Контроль температуры при зарядке

ifynk 20.01.2014 12:20

А как выявить на каком контакте висит датчик?

ifynk 28.01.2014 12:23

Победил я батарею для 3G модема. Здесь на форуме посоветовали раскурочить батарею и использовать родной контроллер. Просто подать питание вместо литиевого элемента не получилось, точнее получилось, но после того, как пропадает питание, контроллер повторно не запускался. Подал питание на крайние контакты, при этом контроллер оставил припаянным ко всем 4 контактам. Также закоротил кнопку включения. Теперь при подачи питания модем запускается и раздает инет по WiFi. То, что мне и было нужно.

s.m. 28.01.2014 13:12

Цитата:

Подал питание на крайние контакты, при этом контроллер оставил припаянным ко всем 4 контактам.
Надеюсь, не более 4.2В? Или батарейку все же скинули?
Но, ИМХО, вариант подключения конечно же неправильный, но если ничего при этом не сдохло - почему бы и нет.

ifynk 28.01.2014 13:22

Цитата:

Сообщение от s.m. (Сообщение 284872)
Надеюсь, не более 4.2В? Или батарейку все же скинули?
Но, ИМХО, вариант подключения конечно же неправильный, но если ничего при этом не сдохло - почему бы и нет.

Батарейку выкинул совсем. Питание подаю 4.7В, если меньше, то показывает, что батарея разряжена. Два дня катаюсь, пока полет нормальный. Если сдохнет, то куплю просто USB 3G-WIFI и все проблемы отпадут сами собой )

ifynk 28.01.2014 13:25

Цитата:

Сообщение от s.m. (Сообщение 284872)
Но, ИМХО, вариант подключения конечно же неправильный, но если ничего при этом не сдохло - почему бы и нет.

Кстати, а как правильно? Я думаю, что контроллер, после того, как на нем резко пропало питание, думал, что ушла батарейка и больше не хотел включаться. Даже когда вернул батарейку обратно. Запустить удалось только подачей питания на крайние контакты. Если после этого снова подключить питание вместо литиевого элемента (тут я 4.3В подавал), то он снова запускался до первого отключения.

ifynk 28.01.2014 13:58

Может кто сталкивался? При запуске своего приложения, если включено питание, я программно перевожу планшет в Carmode. При этом пропадают иконки с трея - иконка отладки, приложения, иконка carmode. Если же запускать приложение и не делать переход в carmode, то тогда все нормально работает. Ошибок никаких не выдает.

ifynk 13.04.2014 00:10

Вложений: 1
Всем привет. Немного переделал свою оболочку. Ушел от использования PowerAmp в пользу библиотеки basslib. На вкладке плеера теперь есть огромный слайдер, в который легко попадать для перемотки трека.

В планах:
1. Перевести Stream Radio на basslib.
2. Более грамотно реализовать базу треков. Сейчас просто берутся файлы из папки.
3. Добавить запоминание текущего трека и позиции.
4. Перевести AudioManager на интерфейсы )

s.m. 13.04.2014 01:16

Цитата:

Перевести Stream Radio на basslib.
А в чем смысл, у меня прекрасно работает на стандартном медиаплеере из SDK?
А для MP3 не вижу смысла в каких супер мега плеерах.
Другое дело, что МТС у нас работает отвратительно и пришлось сделать автоматический реконнект при потере потока более 30 секунд.
Цитата:

Более грамотно реализовать базу треков. Сейчас просто берутся файлы из папки.

Плейлисты?
Цитата:

Добавить запоминание текущего трека и позиции.
Для этого нужно иметь где-то в базе текущий плейлист

Цитата:

Перевести AudioManager на интерфейсы
Что это значит?

ifynk 13.04.2014 12:05

Радио у меня тоже работает отлично на стандартном mp. Тут для меня скорее смысл в том, чтоб все превести на одну платформу. Плюс практика.

Скорее не плейлисты, а определенной структуры список, который будет один раз формироваться по указанному каталогу, а потом все данные из него будут читаться. Я не храню много музыки постоянно на планшете и там просто одна папка с mp3'шками.

Для запоминания трека не обязтаельно плейлист, я думаю. Это будет зависеть от реализации самой библиотеки.

Интерфейсы. Ну это же то, что вы мне посоветовали сделать для плеера и радио в плане кода - фабрика классов )

ifynk 07.05.2014 18:42

Вложений: 5
Доделал таки управление громкостью магнитолы. Сделал самым простым способом - с помощью оптронов. На планшете установил максимальный уровень громкости. Правда пришлось пересобрать framework-res.apk из-за того, что постоянно выскакивало предупреждение о большом уровне громкости и если не нажмешь OK, то дальше громкость не поднималась.

Оболочку переделал немного.


Часовой пояс GMT +4, время: 23:34.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot