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

Kitty

Пользователи
  • Постов

    792
  • Зарегистрирован

  • Посещение

  • Победитель дней

    16

Весь контент Kitty

  1. Fix list for RAD Studio XE6, Delphi XE6 and C++Builder XE6 Update 1 http://edn.embarcadero.com/article/43893
  2. Выяснилась доп. информация. Попробовала видео файл со звуком. На тех устройствах, что не воспроизводит видео, слышен звук, а видео так и не появилось...
  3. Вот два устройства, на которых не работает. Вижу ShowMessage и тишина: http://www.iconbit.ru/products/107378/ Андроид 4.2.2 http://www.3-q.ru/products/tablets/bc9710am/ прошивка Андроид 4.1.1 Все устройства с root правами. Тестовый код создан на С++ Builder XE6.
  4. Правило 2.2.5 приложить проект. У меня всего пару строчек кода в абсолютно чистом тестовом проекте. И все это прекрасно работает на одном планшете, а на двух других устройствах нет. Просто ничего не происходит. Вижу ShowMessage и все. #include <System.IOUtils.hpp> void __fastcall TForm1::Button1Click(TObject *Sender) { //файл file1.mp4 лежит в папке Downloads андроид устройства String VideoFileName = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), L"file1.mp4"); if(FileExists(VideoFileName)) { ShowMessage(L"Все нормально я здесь!");//вижу сообщение на всех устройствах MediaPlayer1->FileName = VideoFileName; MediaPlayer1->Play(); } }
  5. У меня есть код который просто запускает видео файл. MediaPlayer1->Play(); На планшете с Андроид 4.4.2 все нормально никаких проблем. Видео запускается. На планшете с Андроид 4.1 ничего не происходит. Видео файл не запускается. Нажимаю Button c кодом MediaPlayer1->Play(); и тишина. Тот же самый код, тот же самый видео файл. Такая же проблема на Андроид 4.2 на устройстве iconBIT (HD-медиаплеер). Может работа TMediaPlayer возможна только в последних версиях Андроида? С++ Builder XE 6.
  6. Подскажите, пожалуйста, почему в дебаге на реальном устройстве мне не показывается значение переменных? Ставлю точку останова, но все переменные показывает как unavailable. Иду по коду клавишей F8: String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetSharedDownloadsPath(), L"files.ini"); if(FileExists(path)) { //попадаю сюда по F8 однако не вижу в дебаге чему равно path //path = unavailable ***код*** } С++ Builder XE 6
  7. Я использую TMediaPlayer для воспроизведения видео по кругу и плюс в таймере необходим запуск разных видео файлов по расписанию. Выяснилось следующее - если использовать для запуска нового файла такой код, то периодически программа вываливается из памяти: //в таймере запуск видео с другим именем MediaPlayer1->Stop(); MediaPlayer1->FileName = name; //другой файл MediaPlayer1->Play(); А если запускать новый файл в TMediaPlayer так, то вроде работает и программа не вываливается: //в таймере запуск видео с другим именем MediaPlayer1->Stop(); MediaPlayer1->Clear();//вроде помогло, но надежно ли? MediaPlayer1->FileName = name; MediaPlayer1->Play(); Достаточно ли строки MediaPlayer1->Clear(); чтобы предотвратить возможное вываливание программы из памяти в будущем?
  8. Большое спасибо! Черный экран не наблюдается. Для С++ пользователей: if(MediaPlayer1->State == TMediaState::Stopped) Если таймер=100 мс и программа должна работать 24 часа в сутки, то не перегрузит ли это процессор?
  9. Согласно рекомендациям модифицировала стандартный пример Embarcadero: #include <fmx.h> #include <System.ioutils.hpp> #pragma hdrstop #include "VideoForm.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.fmx" TVideoPlayBackForm *VideoPlayBackForm; //--------------------------------------------------------------------------- __fastcall TVideoPlayBackForm::TVideoPlayBackForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TVideoPlayBackForm::videoBtnClick(TObject *Sender) { /*Under Project-Deployment, we added the media file and set the remote path. When the program starts, everything in the directory that is set under remote path is copied over to the Documents folder on the device. The MediaPlayer loads the file from the Documents folder*/ #if defined(TARGET_OS_IPHONE) || defined(TARGET_IPHONE_SIMULATOR) || defined(__ANDROID__) MediaPlayer1->FileName = IncludeTrailingPathDelimiter(System::Ioutils::TPath::GetDocumentsPath()) + "Ocean.mp4"; #endif MediaPlayer1->Play(); Timer1->Enabled = true; } //--------------------------------------------------------------------------- void __fastcall TVideoPlayBackForm::Timer1Timer(TObject *Sender) { // Выполнять таймер с интервалом 1 секунда if(MediaPlayer1->CurrentTime == MediaPlayer1->Duration) { MediaPlayer1->CurrentTime = 0; MediaPlayer1->Play(); } } //--------------------------------------------------------------------------- На моем планшете с андроид, видео проиграло один раз и замерло. Где моя ошибка?
  10. Огромное спасибо за рекомендации! Буду пробовать.
  11. Значит, межу воспроизведениями будет секунда паузы, и пользователь увидит черный экран? Медиа классик плеер воспроизводит видео по кругу без задержки и пользователь не замечает перезагрузку видео от конца к началу. MX плеер из Андроид маркета, если в его настройках поставить, галочку программное декодирование, тоже крутить видео без видимого для пользователя перехода от конца к началу. Если видео ролик представляет собой рекламную композицию, то очень досадно, когда появляется черный секундный экран при переходе. Может ли FMX плеер справиться с такой задачей – проигрывание видео по кругу без заметной паузы перехода от конца к началу?
  12. В стандартных примерах Embarcadero есть пример использования на мобильном устройстве TMediaPlayer. Пример есть и на паскале и на С++. На С++ он тут: C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\CPP\Mobile Snippets\VideoPlayback Видео нормально воспроизводится на моем андроид устройстве. Как заставить видео работать в зацикленном режиме? Мне надо чтобы видео играло по кругу. TMediaPlayer может сделать зацикливание при воспроизведении видео? Эта функция есть у всех стандартных плеерах. Спасибо.
  13. Хотелось бы чтобы в этиx статьях были бы и примеры кода на С++ для Builder. Ну хотя бы основные моменты. Иногда очень сложно понять как портировать код на паскале в проект С++. Бывает проект на паскале работает, а с кодом на С++ нет. Сейчас С++ Builder ХЕ6 полностью поддерживает все виды проектов FM, поэтому хотелось бы чтобы С++ также не обделили вниманием. Спасибо.
  14. А это можно портировать и затем использовать в С++ Builder? Спасибо.
  15. Например, стандартные приемы, которые можно использовать в Windows - привязка к оборудованию. Просто интересно в познавательных целях, какие технологии используются для защиты в андроид приложениях.
  16. Если программа создана для корпоративного использования и не будет выкладываться в маркет, то какие есть для этого случая варианты какой-то элементарной защиты такой андроид программы? Спасибо.
  17. Чтобы убить процесс нужной программы на андроид устройстве разработчикам java справка дает такую рекомендацию: Можно ли эту рекомендацию применить в Delphi/C++ Builder? Если да то, как будет выглядеть этот код? Я пробовала использовать альтернативную эту рекомендацию: Delphi Android ActivityManager ActivityManager.killBackgroundProcesses(String packageName) Но в С++ этот PAS файл у меня не заработал.
  18. И так тоже работает: void __fastcall TForm1::FormResize(TObject *Sender) { Application->ProcessMessages(); Sleep(5); }
  19. Вот это исправляет проблему: void __fastcall TForm1::FormResize(TObject *Sender) { //Портретная ориентация if (Height > Width) { Application->ProcessMessages(); Realign(); } //Альбомная ориентация else if (Height < Width) { Application->ProcessMessages(); Realign(); } } Спасибо Nix0N.
  20. Может кому пригодиться. Использование java классов JIntent и JNet_Uri. Спасибо разработчику Indy Remy Lebeau (TeamB) http://bcbjournal.org/forums/ 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); }
  21. У меня в таймере, если происходит ошибка, выдается сообщение пользователю и программа закрывается. Пример кода: ShowMessage(L"Не найден видео файл " + VideoFileName + L". Программа будет закрыта."); Application->Terminate(); Также на форме есть кнопка просто закрытия главной формы приложения: Close(); В обоих случаях программа реагирует одинаково - уходи в список ранее запускаемых программ. Есть ли принципиальная разница для Андроид приложений между кодом: Application->Terminate(); и закрытием главной формы: Close(); ?
  22. У меня на форме панель с выравниванием по центру на панели две кнопки и текстовая метка. Все, больше ничего нет. Никаких стилей, все по дефолту.
  23. Большое спасибо за развернутые ответы! Да, именно так и планируется. Закуплены однотипные устройства: http://rozetka.com.ua/iconbit_movie_3d_iptv/p387929/ и сугубо для этих целей - играть по одному видео по расписанию. Сейчас вместо программы, в назначенное время ходит человек и запускает нужные видео. Конкретно на этих устройствах еще не тестировала программу т.к. пока все в разработке. На моем же PIPO M7 Андроид 4.4.2 похоже, что работает. Обидно будет, что возможно на этих устройствах программа не заработает как надо, но плюс по любому есть - изучение FM.
  24. Большое спасибо! Видео запускается в том же экземпляре MXPlayer-a. Устройства с Андроид подсоединены к телевизорам, которые весят в ресторане фаст фуда. На телевизорах крутятся видео ролики (реклама-меню и т.п.). Программа просто должна сама менять видео в назначенное время. Сейчас попробовала на своем планшете, вроде видео меняется в том же окне MXPlayer плеера без заметных проблем. Просто думала может есть какие-то не учтенные подводные камни (утечки памяти и т.п.) т.к. смутно представляю пока ОС Андроид.
×
×
  • Создать...