我发现了几个解决方案,如何在Java中做到这一点,但没有找到如何在QML或Qt中做到这一点。我知道首先我应该在AndroidManifest.xml
中设置WAKE_LOCK
权限。我应该怎么做才能在运行时打开和关闭来自Qt的屏幕锁定?如何让屏幕保持在Qt for android?
3
A
回答
6
您可以使用the Qt Android Extras模块并使用JNI从C++调用相关的Java函数。例如:
void keepScreenOn()
{
QAndroidJniObject activity = QtAndroid::androidActivity();
if (activity.isValid()) {
QAndroidJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;");
if (window.isValid()) {
const int FLAG_KEEP_SCREEN_ON = 128;
window.callObjectMethod("addFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
}
}
}
1
您可以通过编辑qt本身使用的java文件来实现此目的。在android路径的src下的安装路径中,您会找到QtActivity.java文件。在onCreate函数中添加以下行
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
也应该添加AndroidManifest.xml中的WAKE_LOCK权限。
建立该项目,它会正常工作。而不是用QtAndroid::runOnAndroidThread
window.callObjectMethod
4
- 使用
window.callMethod<void>
,使用clearFlags
这是测试的Qt 5.7的代码:
void keep_screen_on(bool on) {
QtAndroid::runOnAndroidThread([on]{
QAndroidJniObject activity = QtAndroid::androidActivity();
if (activity.isValid()) {
QAndroidJniObject window =
activity.callObjectMethod("getWindow", "()Landroid/view/Window;");
if (window.isValid()) {
const int FLAG_KEEP_SCREEN_ON = 128;
if (on) {
window.callMethod<void>("addFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
} else {
window.callMethod<void>("clearFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
}
}
}
QAndroidJniEnvironment env;
if (env->ExceptionCheck()) {
env->ExceptionClear();
}
});
}
相关问题
- 1. 如何在Android上保持屏幕?
- 2. 如何保持android屏幕大小?
- 3. Android:保持屏幕上
- 4. 如何在网页上保持屏幕
- 5. 如何让屏幕保持特定的持续时间?
- 6. 如何让对话始终保持在屏幕上
- 7. 如何让所有屏幕在Swift中保持一致?
- 8. 无法保持屏幕睡在Android 4.2
- 9. Android保持屏幕在应用程序
- 10. 保持在的LinearLayout屏幕
- 11. 当屏幕关闭时,如何让Android在后台保持清醒状态
- 12. 如何让Android按钮视图保持在屏幕的按钮中?
- 13. 如何在锁定屏幕后保持Android相机闪光灯
- 14. 如何在旋转屏幕时保持android搜索对话框?
- 15. Android如何在使用webView时保持屏幕状态
- 16. Android Wear表面保持屏幕
- 17. Android:保持屏幕上的小部件
- 18. 当屏幕关闭时,如何让我的Android服务保持运行状态?
- 19. 如何让Logcat在Android Studio中保持全屏
- 20. 如何使用ProgressDialog保持屏幕?
- 21. 如何让应用始终在屏幕上保持活跃状态
- 22. Android支持屏幕
- 23. 如何让Android应用程序支持所有设备屏幕?
- 24. 如何设置保持屏幕和全屏幕标志?
- 25. 保持屏幕打开
- 26. 将手机屏幕保持在Cocos2dx上
- 27. android-如何支持多屏幕
- 28. 屏幕保持终止
- 29. 如何保持Galaxy S2屏幕处于活动状态(Android OS)?
- 30. Android - 保持UI无论屏幕大小如何组织
这正是我正在寻找的! –
如果我在main()中调用它,它按预期工作,但是如果我在一个插槽中调用它,它不工作并抛出一些java异常。在调用exec()之后,QGuiApplication事件循环移动到不同的线程。 –
编号'QGuiApplication'将保留在应用程序主线程中。可能最好在新的新问题中提出并描述你的问题。 – Nejat