在android中更改特定页面的方向



我正在Qt和c++中开发一个android应用程序。我的整个应用程序都是纵向的。但当我播放视频时,我想将方向更改为横向,视频结束后,它应该再次更改为纵向。

因此,问题是如何在适用于Android的Qt/C++应用程序中将屏幕设置为横向或纵向模式。

您不需要通过Java代码来调用它。您可以使用JNI从C++直接调用它,如下所示:

void MyAndroidHelperClass::setScreenOrientation(int orientation)
{
    QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/android/QtNative", "activity", "()Landroid/app/Activity;");
    if ( activity.isValid() )
    {
        activity.callMethod<void>
                ("setRequestedOrientation" // method name
                 , "(I)V" // signature
                 , orientation);
    }
}

Android上的屏幕方向可以使用setRequestedOrientation Java函数更改,因此您应该从应用程序中调用Java函数。要在Qt Android应用程序中运行Java代码,您应该使用Qt Android Extras模块,该模块包含在Android上开发的附加功能。

您可以使用JNI从C/C++调用Java函数,或者从Java回调C/C++函数。

在这里,您可以使用静态Java方法,如:

package com.MyApp;
public class OrientationChanger
{
    public static int change(int n)
    {
        switch(n)
        {
               case 0:
                   setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                   break;
               case 1:
                   setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                   break;                   
           }
    }
}

首先,你需要将其添加到你的.pro文件中:

QT += androidextras

并包括相关头文件:

#include <QAndroidJniObject>

然后,您可以从C++代码中调用这个静态Java函数。

将方向更改为横向模式:

bool retVal = QAndroidJniObject::callStaticMethod<jint>
                        ("com/MyApp/OrientationChanger" // class name
                        , "change" // method name
                        , "(I)I" // signature
                        , 0);

将方向更改为纵向模式:

bool retVal = QAndroidJniObject::callStaticMethod<jint>
                        ("com/MyApp/OrientationChanger" // class name
                        , "change" // method name
                        , "(I)I" // signature
                        , 1);

相关内容

  • 没有找到相关文章

最新更新