【问题标题】:Java code with QtAndroidExtras带有 QtAndroidExtras 的 Java 代码
【发布时间】:2015-11-30 07:53:38
【问题描述】:
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);

我想通过 JNI(使用 QtAndroidExtras)在 C++ 中实现它,但我不明白代码 (PowerManager) 的作用。

那是类型转换吗?我想知道是否可以使用 QtAndroidExtras 来实现它而无需编写 java 类。

【问题讨论】:

标签: java c++ java-native-interface qtandroidextras


【解决方案1】:

PowerManager 是 Android SDK 的 Java 类。 Here is its documentation.

这是一个如何通过QAndroidJniObject 使用PowerManager 的示例。

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!";
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2013-02-06
    相关资源
    最近更新 更多