Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt android屏幕锁java问题_Android_C++_Qt_Java Native Interface_Qtandroidextras - Fatal编程技术网

Qt android屏幕锁java问题

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

我有Qt应用程序,需要在应用程序运行时防止屏幕变暗。我将以下代码放在main.cpp中main()的开头:

#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);
    }
}