抓住锁屏事件

时间:2016-04-22 08:40:44

标签: android c++builder firemonkey c++builder-xe8

美好的一天。我在Embarcadero Xe8中使用C ++ Builder编写。我在Ios和android上做移动应用程序项目并面临这样的问题:我无法抓住手机锁屏事件。我以前一直这样做:

    bool TForm1::HandleApp(TApplicationEvent a, TObject *x)
{
    if (a == TApplicationEvent::EnteredBackground)
    {
        MediaPlayer1->Stop();
    }
    return true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  _di_IFMXApplicationEventService a;
   if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXApplicationEventService), &a))
   {
    a->SetApplicationEventHandler(TForm1::HandleApp);
   }
}

但是错误:

  

\ Unit1.cpp(33):无法初始化类型' TApplicationEventHandler' (aka' bool( closure *)(Fmx :: Platform :: TApplicationEvent,System :: TObject __borland_class * __ strong)__ attribute ((pcs(" aapcs-vfp" )))')左值类型' bool(__closure *)(Fmx :: Platform :: TApplicationEvent,System :: TObject __borland_class * __ strong)'   FMX.Platform.hpp(252):将参数传递给参数' AEventHandler'这里

我不知道还有什么可以做的!你能帮我吗?

1 个答案:

答案 0 :(得分:0)

您的HandleApp()方法缺少__fastcall调用约定:

bool __fastcall  TForm1::HandleApp(TApplicationEvent a, TObject *x)

另外,您对SetApplicationEventHandler()的呼吁需要改为:

a->SetApplicationEventHandler(&HandleApp);

这很重要,因为事件处理程序是__closure,因此它在其中包含两个指针 - 指向要调用的类方法的指针,以及指向调用该方法的对象实例的指针(方法的this值。当您仅按类名传递处理程序时,编译器不知道要对哪个对象实例进行操作,因此无法填充__closure。上面的语法允许编译器看到HandleApp应与Form1对象关联。