android — Невозможно вызвать PowerManager.WakeLock.newWakeLock с использованием 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 (я развертываю приложение Qt на Android).

Я это сделал:

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");
else
assert( false );
}
}
}

Проверено от отладчика: levelAndFlags правильно (6), tag правильно («Мой тег»), но wakeLock.isValid() возвращает ложь

Должна быть проблема с этой строкой:

QAndroidJniObject wakeLock = powerMgr.callObjectMethod("newWakeLock", "(ILjava/lang/String;)Landroid/os/PowerManager/WakeLock;", levelAndFlags,tag.object<jstring>());

Но я не могу понять, что …

1

Решение

Вложенные имена классов требуют специального синтаксиса:

Landroid/os/PowerManager/WakeLock

Должно быть:

Landroid/os/PowerManager$WakeLock

И это работает!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]