Перейти к содержанию
Fire Monkey от А до Я
  • 0

Запуск видео по расписанию в плеере на Андроиде


Kitty

Вопрос

Мне надо запускать видео по расписанию в плеере MX Андроид на устройстве iconBIT Андроид 4.2. Плеер MX настроен на проигрывание видео по кругу.

В 10.00 играть зациклено одно видео в плеере.

В 12.00 перестать играть видео №1 и начать играть зациклено другое видео в плеере.

и т.д.

Исходя из того что видео в плеере будет проигрываться по таймеру, надо ли вносить какие-либо изменения в код проигрывания видео ниже:

//C++ Builder XE6
//функция будет вызываться по таймеру:
void PlayVideo(const String AFileName)
{
	_di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW);
	_di_Jnet_Uri Data = StrToJURI(AFileName);
	Intent->setDataAndType(Data, StringToJString(L"video/mp4"));
	SharedActivity()->startActivity(Intent);

}
Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Да, необходимо завершить предыдущую активити с MXPlayer

 

Используйте JNI и переделайте под Ваши нужды:

ActivityManager.killBackgroundProcesses(String packageName)

Где packageName - название пакета MXPlayer

 

Если видео запускается в том же экземпляре программы MXPlayer, то этого делать не нужно.

 

Можете подсмотреть здесь

Ссылка на комментарий
  • 0

Большое спасибо!

Видео запускается в том же экземпляре MXPlayer-a. Устройства с Андроид подсоединены к телевизорам, которые весят в ресторане фаст фуда. На телевизорах крутятся видео ролики (реклама-меню и т.п.). Программа просто должна сама менять видео в назначенное время. Сейчас попробовала на своем планшете, вроде видео меняется в том же окне MXPlayer плеера без заметных проблем. Просто думала может есть какие-то не учтенные подводные камни (утечки памяти и т.п.) т.к. смутно представляю пока ОС Андроид.

Ссылка на комментарий
  • 0
  • Администраторы

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

 

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

 

Отсюда следует, что гарантированно управлять по расписанию вашим плеером таким способом не получится. Работать будет только на тех устройствах, которые не выгружают ваше активити. Если это будет работать на одном и том же устройстве, на котором вы проверили работу и на котором не будет работать ничего лишнего, то можно использовать этот способ.

 

Однако, если вы хотите добиться одинаковой работы на любом устройстве, то нужно пользоваться другим подходом. А именно:

  1. AlarmManager - специальный системный планировщик Андроид. Который позволяет на системном уровне послать интент любом приложению в указанные моменты времени. 
  2. Сервис - приложение, которое работает в фоне.

Сразу скажу, что использование первого в Delphi требует хорошего понимания, как это работает и что нужно сделать. Примеров нету. У меня пока руки не дошли показать, как с ним работать. Хотя он успешно используется в FMX для эмуляции отложенных уведомлений, которых, как известно нету в Андроиде. 

На форуме было общее обсуждение этого планировщика тут: RSS reader

 

На счет второго в интернете были зарубежные статьи на эту тему. Но я не углублялся в них. У нас были ссылки на форуме по созданию сервисов

 

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

Ссылка на комментарий
  • 0

Если не ошибаюсь (хотя не исключено, что с чем то путаю) - был в Uses Permissions параметр, который определяет прогу как "невыгружаемую" для android. Пользоваться сим параметром Google не реккомендует, но вроде как он есть, и как вариант для данной ситуации - воспользоваться им можно. Параметр - честно говоря - запамятовал. Если найду - маякну. А может кто раньше подскажет.

Ссылка на комментарий
  • 0
  • Администраторы

Если такая опция и есть, то она скорее всего носит рекомендательный характер для системы, а не обязательный. Например, есть опция largeHeap в манифесте, которая говорит о том, что нужно выделять приложению больше памяти largeHeap. Но официально указано, что нет гарантии ее выполнения. Что в общем и ожидаемо. Так как если на устройстве нет свободной памяти, то больше ее брать не от куда.

 

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

Ссылка на комментарий
  • 0

Большое спасибо за развернутые ответы!

 

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

 

Да, именно так и планируется. Закуплены однотипные устройства: http://rozetka.com.ua/iconbit_movie_3d_iptv/p387929/ и сугубо для этих целей - играть по одному видео по расписанию. Сейчас вместо программы, в назначенное время ходит человек и запускает нужные видео.

 

Конкретно на этих устройствах еще не тестировала программу т.к. пока все в разработке. На моем же PIPO M7 Андроид 4.4.2 похоже, что работает. Обидно будет, что возможно на этих устройствах программа не заработает как надо, но плюс по любому есть - изучение FM. :)

Ссылка на комментарий
  • 0

Brovin Yaroslav

 

Согласен. Такого рода вещи не стоит юзать без крайне необходимости. И естественно - если и использовать то после тестирования.

 

Kitty

 

Что до параметра, то вроде как вот он (не проверял, ессно, и не могу сказать можно ль его поставить в самом BDS. скорее всего - ручками в манифесте):

в корневом элементе (манифеста) <application, атрибут android:persistent="false|true". По умолчанию - false. При true - "приложение должно работать во что бы то ни стало. Актуально для небольшого круга системных приложений." 

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...