如何使用Qt防止iOS屏幕锁定

4

我希望在Qt上开发一个包含地图的iOS应用程序。在使用过程中,手机的屏幕锁定应该被禁用。但是我无法找到任何解决方案来使用Qt防止iOS设备锁屏。

有什么方法可以实现吗?

1个回答

8

您必须使用原生的iOS API。您可以在Qt应用程序中直接使用clang编译器编译ObjC++代码。

因此,您可以混合使用.cpp.mm(ObjC++)文件。QtCreator和qmake通过OBJECTIVE_SOURCES关键字支持此功能。

yourclass.mm实现中:

    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>

    void YourClass::setTimerDisabled() {
        [[UIApplication sharedApplication] setIdleTimerDisabled: YES] 
    }

yourclass.h:

class YourClass
{
public:
   void setTimerDisabled()
}

现在你可以在Qt应用程序中的任何位置进行调用:
YourClass yc;
yc.setTimerDisbabled();

如果您只想在iOS上使用您的项目文件(.pro),请按如下方式操作:

ios {
OBJECTIVE_SOURCES += \
    yourclass.mm \
}

如果您只想在单个平台上使用指定的代码,请在源文件和头文件中使用预处理命令,例如:

#if defined(Q_OS_IOS)
   // iOs stuff
#elsif defined(Q_OS_ANDROID)
   //Android stuff ...
#else
  //Other stuff ...
#endif

谢谢Hubi!但现在我遇到了一个问题,如果我为Android编译它,qt找不到Foundation。我的应用程序应该在两个操作系统上都能工作。你能再给我一些提示吗? - Martin Bischof
现在我可以编译所有内容并在IOS上运行应用程序,但不幸的是显示屏无法保持唤醒状态。而且在Qt Creator中,[[UIApplication...这一行显示为未知。你能再帮我一次吗? :) - Martin Bischof
好的,现在它可以工作了!我只需要在.pro文件的ios{}部分中添加一行“LIBS += -framework UIKit”即可。非常感谢你,Hubi! - Martin Bischof
这个很好用!我的应用程序可以更新蓝牙连接设备的固件。由于iOS自动锁定,更新需要10分钟并且可能会失败。虽然在iOS设置中将“显示”>“自动锁定”>“从不”可以解决问题,但这个解决方案更好。谢谢! - Ed of the Mountain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接