2
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);

I want implement that in C++ via JNI (using QtAndroidExtras), but I don't understand what the code (PowerManager) does.

Is that type conversion? I wondering is it possible to implement that with QtAndroidExtras without having to write a java class.

Bendy
  • 3,506
  • 6
  • 40
  • 71
morte
  • 325
  • 1
  • 10

1 Answers1

1

PowerManager is a Java class of Android SDK. Here is its documentation.

Here is an example of how PowerManager can be used through QAndroidJniObject.

Java code:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

Equivalent Qt code:

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!";
            }
        }
    }
}
jpo38
  • 20,821
  • 10
  • 70
  • 151