[英]How to keep the screen on in Qt for android?
我在Java中找到了幾個解決方法,但是我沒有找到如何在QML或Qt中完成它。 我知道首先我應該在AndroidManifest.xml
設置WAKE_LOCK
權限。 我該怎么做才能在運行時打開和關閉Qt的屏幕鎖定?
您可以使用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);
}
}
}
window.callMethod<void>
而不是window.callObjectMethod
QtAndroid::runOnAndroidThread
在GUI線程上運行 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();
}
});
}
您可以通過編輯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權限。
建立項目,它將工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.