PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
我想通过 JNI(使用 QtAndroidExtras)在 C++ 中实现它,但我不明白代码的(PowerManager)
作用。
那是类型转换吗?我想知道是否可以使用 QtAndroidExtras 实现它而无需编写 java 类。
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
我想通过 JNI(使用 QtAndroidExtras)在 C++ 中实现它,但我不明白代码的(PowerManager)
作用。
那是类型转换吗?我想知道是否可以使用 QtAndroidExtras 实现它而无需编写 java 类。
PowerManager
是Android SDK 的Java 类。这是它的文档。
这是一个如何PowerManager
通过QAndroidJniObject
.
Java代码:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
等效的Qt代码:
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
if ( activity.isValid() )
{
QAndroidJniObject serviceName = QAndroidJniObject::getStaticObjectField<jstring>("android/content/Context","POWER_SERVICE");
if ( serviceName.isValid() )
{
QAndroidJniObject powerMgr = activity.callObjectMethod("getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;",serviceName.object<jobject>());
if ( powerMgr.isValid() )
{
jint levelAndFlags = QAndroidJniObject::getStaticField<jint>("android/os/PowerManager","SCREEN_DIM_WAKE_LOCK");
QAndroidJniObject tag = QAndroidJniObject::fromString( "My Tag" );
QAndroidJniObject wakeLock = powerMgr.callObjectMethod("newWakeLock", "(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;", levelAndFlags,tag.object<jstring>());
if ( wakeLock.isValid() )
{
wakeLock.callMethod<void>("acquire", "()V");
qDebug() << "Acquired lock!";
}
}
}
}