.pro文件
添加如下语句: QT += androidextras
添加WAKE_LOCK权限
添加头文件、命名空间和宏定义
#include <QtAndroid>
#include <QAndroidJniEnvironment>
#include <QAndroidJniObject>
using namespace QtAndroid;
#define CHECK_EXCEPTION() \
if(env->ExceptionCheck())\
{\
qDebug() << "exception occured";\
env->ExceptionDescribe();\
env->ExceptionClear();\
}
功能实现
QAndroidJniEnvironment env;
QAndroidJniObject activity = androidActivity();
//取消屏幕常量
// if(m_lastChecked)
// {
// if(m_wakeLock.isValid())
// {
// m_wakeLock.callMethod<void>("release");
// CHECK_EXCEPTION();
// }
// m_lastChecked = false;
// return;
// }
QAndroidJniObject name = QAndroidJniObject::getStaticObjectField(
"android/content/Context",
"POWER_SERVICE",
"Ljava/lang/String;"
);
CHECK_EXCEPTION();
QAndroidJniObject powerService = activity.callObjectMethod(
"getSystemService",
"(Ljava/lang/String;)Ljava/lang/Object;",
name.object<jstring>());
CHECK_EXCEPTION();
QAndroidJniObject tag = QAndroidJniObject::fromString("QtJniWakeLock");
// 10 == SCREEN_BRIGHT_WAKE_LOCK
// 6 == SCREEN_DIM_WAKE_LOCK
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
// before setContentView() was called.
QAndroidJniObject m_wakeLock = powerService.callObjectMethod(
"newWakeLock",
"(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;",
10,
tag.object<jstring>()
);
CHECK_EXCEPTION();
qDebug() << "wakeLock isValid() - " << m_wakeLock.isValid();
if(m_wakeLock.isValid())
{
m_wakeLock.callMethod<void>("acquire");
CHECK_EXCEPTION();
}