【问题标题】:Changing orientation of a particular page in android在android中更改特定页面的方向
【发布时间】:2015-02-21 08:11:46
【问题描述】:

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

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

【问题讨论】:

    标签: java android c++ qt qtandroidextras


    【解决方案1】:

    您不需要通过 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);
        }
    }
    

    【讨论】:

      【解决方案2】:

      可以使用setRequestedOrientation Java 函数更改 Android 上的屏幕方向,因此您应该从应用中调用 Java 函数。要在 Qt Android 应用程序中运行 Java 代码,您应该使用 the 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);
      

      【讨论】:

      • 如果在 androidManifest.xml 中修复了 android 屏幕的方向,我可以将其更改为特定方向
      • 我不确定。你可以试试看。您是否能够使用答案中的方法旋转屏幕?
      • 我现在要试一试,所以我问了它,因为我在 android manifest 中已将方向固定为纵向
      • 我正在尝试上面的java代码来改变qt中android中的方向。我还导入了import android.content.pm.ActivityInfo;但我在 setRequestedOrientation 中收到 source not found 错误
      • 你把你的Java文件放到Android包源目录了吗?
      猜你喜欢
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多