Однако было найдено решение и в продолжение темы вопрос решен так:
1. Воспользуемся советом Nix0N и используем PAS файл из той темы.
2. Чтобы в C++ Builder XE6 можно было корректно использовать killBackgroundProcesses, в PAS файл вносим изменения любезно предоставленные Hugh Xiao. Источник обсуждения тут:
//------------------------------------------------
// RegisterTypes added by Hugh Xiao : qs.xiao@gamil.com 2014-07-20 Taiwan Time
procedure RegisterTypes;
begin
TRegTypes.RegisterType('Androidapi.JNI.ActivityManager.JDebug_MemoryInfo', TypeInfo(Androidapi.JNI.ActivityManager.JDebug_MemoryInfo));
end;
initialization
RegisterTypes;
// end by Hugh
//---------------------------------------------------
3. Теперь запускаем MX плеер по расписанию кодом, при котором предыдущий экземпляр видео уничтожается и таким образом программа не вываливается из памяти:
//запуск PlayVideo из таймера Timer1
void PlayVideo(const String AFileName)
{
try
{
//MX player: https://sites.google.com/site/mxvpen/api
_di_JString PackageName = StringToJString(L"com.mxtech.videoplayer.ad");
_di_JActivityManager activityManager = GetActivityManager();//<- для работы GetActivityManager необходим код от Hugh Xiao
activityManager->killBackgroundProcesses(PackageName); //убиваем предыдущее видео
String EXE = System::Ioutils::TPath::GetExtension(AFileName);
_di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW);
_di_Jnet_Uri Data = StrToJURI(AFileName);
Intent->setDataAndType(Data, StringToJString(L"video/" + EXE));
//Важные две строки совет от rlebeau разработчика Indy
Intent->setPackage(PackageName);
Intent->addFlags(TJIntent::JavaClass->FLAG_ACTIVITY_CLEAR_TOP | TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK | TJIntent::JavaClass->FLAG_ACTIVITY_NO_HISTORY);
//Application->ProcessMessages();
//Sleep(2000);
SharedActivity()->startActivity(Intent);//старт нового видео
}
catch(Exception &E)
{
ShowMessage( E.ClassName() + " " + E.Message);
Application->Terminate();
}
}
В архиве правильный PAS и HPP, включая тестовый пример на С++.
Вопрос
Kitty
Тема была закрыта: http://fire-monkey.ru/topic/230-zapusk-video-po-raspisaniiu-v-pleere-na-androide/
Однако было найдено решение и в продолжение темы вопрос решен так:
1. Воспользуемся советом Nix0N и используем PAS файл из той темы.
2. Чтобы в C++ Builder XE6 можно было корректно использовать killBackgroundProcesses, в PAS файл вносим изменения любезно предоставленные Hugh Xiao. Источник обсуждения тут:
http://bcbjournal.org/forums/viewtopic.php?f=10&t=2496&sid=b33b673eeb80f12f15a169a58e55cc67&start=15
Код:
//------------------------------------------------ // RegisterTypes added by Hugh Xiao : qs.xiao@gamil.com 2014-07-20 Taiwan Time procedure RegisterTypes; begin TRegTypes.RegisterType('Androidapi.JNI.ActivityManager.JDebug_MemoryInfo', TypeInfo(Androidapi.JNI.ActivityManager.JDebug_MemoryInfo)); end; initialization RegisterTypes; // end by Hugh //---------------------------------------------------3. Теперь запускаем MX плеер по расписанию кодом, при котором предыдущий экземпляр видео уничтожается и таким образом программа не вываливается из памяти:
//запуск PlayVideo из таймера Timer1 void PlayVideo(const String AFileName) { try { //MX player: https://sites.google.com/site/mxvpen/api _di_JString PackageName = StringToJString(L"com.mxtech.videoplayer.ad"); _di_JActivityManager activityManager = GetActivityManager();//<- для работы GetActivityManager необходим код от Hugh Xiao activityManager->killBackgroundProcesses(PackageName); //убиваем предыдущее видео String EXE = System::Ioutils::TPath::GetExtension(AFileName); _di_JIntent Intent = TJIntent::JavaClass->init(TJIntent::JavaClass->ACTION_VIEW); _di_Jnet_Uri Data = StrToJURI(AFileName); Intent->setDataAndType(Data, StringToJString(L"video/" + EXE)); //Важные две строки совет от rlebeau разработчика Indy Intent->setPackage(PackageName); Intent->addFlags(TJIntent::JavaClass->FLAG_ACTIVITY_CLEAR_TOP | TJIntent::JavaClass->FLAG_ACTIVITY_NEW_TASK | TJIntent::JavaClass->FLAG_ACTIVITY_NO_HISTORY); //Application->ProcessMessages(); //Sleep(2000); SharedActivity()->startActivity(Intent);//старт нового видео } catch(Exception &E) { ShowMessage( E.ClassName() + " " + E.Message); Application->Terminate(); } }В архиве правильный PAS и HPP, включая тестовый пример на С++.
Androidapi.JNI.ActivityManager.zip
6 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.