Qt android屏幕锁java问题
我有Qt应用程序,需要在应用程序运行时防止屏幕变暗。我将以下代码放在main.cpp中main()的开头:Qt android屏幕锁java问题,android,c++,qt,java-native-interface,qtandroidextras,Android,C++,Qt,Java Native Interface,Qtandroidextras,我有Qt应用程序,需要在应用程序运行时防止屏幕变暗。我将以下代码放在main.cpp中main()的开头: #ifdef ANDROID // disable screen lock on android devices QAndroidJniObject activity = QtAndroid::androidActivity(); if (activity.isValid()) { QAndroidJniObject window = activit
#ifdef ANDROID
// disable screen lock on android devices
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.callMethod<void>("addFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
}
}
#endif
我在AndroidManifest.xml中添加了适当的权限(android.permission.WAKE_LOCK)。这个问题似乎是由addFlags()在其主视图之外运行引起的?我在谷歌上搜索了很多次,没有发现其他人有同样的问题
谢谢,
Ivan#如果定义(Q_OS_ANDROID)
QAndroidJniObject活动=QtAndroid::androidActivity();
if(activity.isValid()){
QAndroidJniObject window=activity.callObjectMethod(“getWindow”,“Landroid/view/window;”);
if(window.isValid()){
const int FLAG_KEEP_SCREEN_ON=128;
调用方法(“添加标志”,“I)V”,标志保持屏幕打开);
}
QAndroidJniEnvironment env;if(env->ExceptionCheck()){env->ExceptionClear();}//清除所有可能的挂起异常。
}
#恩迪夫
从5.1 android上获得,对我来说很好当部署在android上时,Qt实际上不会在主应用程序(Java)线程中运行。由于必须从Java主线程调用
android.view.Window.addFlags
,您将很难返回到该线程以使代码正常工作
最好使用唤醒锁
防止系统进入睡眠模式
这将防止应用程序运行时屏幕变暗。我最终用Java完成了这项工作 以下是java代码:
package org.qtproject.visualization;
import org.qtproject.qt5.android.bindings.*;
import android.os.Bundle;
import android.view.WindowManager;
public class ScreenOnActivity extends QtActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
getWindow().addFlags( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON );
super.onCreate(savedInstanceState);
}
}
然后将其集成到应用程序的其余部分。忘了提到我使用的是Qt 5.4.0。
#if defined(Q_OS_ANDROID)
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.callMethod<void>("addFlags", "(I)V", FLAG_KEEP_SCREEN_ON);
}
QAndroidJniEnvironment env; if (env->ExceptionCheck()) { env->ExceptionClear(); } //Clear any possible pending exceptions.
}
#endif
package org.qtproject.visualization;
import org.qtproject.qt5.android.bindings.*;
import android.os.Bundle;
import android.view.WindowManager;
public class ScreenOnActivity extends QtActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
getWindow().addFlags( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON );
super.onCreate(savedInstanceState);
}
}