Uga*_*uga 7 c++ java qt android qtandroidextras
我在Java中找到了几个解决方法,但是我没有找到如何在QML或Qt中完成它.我知道首先我应该设置WAKE_LOCK
权限AndroidManifest.xml
.我该怎么做才能在运行时打开和关闭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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
window.callMethod<void>
而不是window.callObjectMethod
QtAndroid::runOnAndroidThread
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();
}
});
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2713 次 |
最近记录: |