更改 android 中特定页面的方向
Changing orientation of a particular page in android
我正在使用 Qt 和 C++ 开发 android 应用程序。我的整个应用程序都是纵向 orientation.But 当我播放视频时我想将方向更改为横向,并且在视频结束后它应该再次更改为纵向。
所以问题是如何在 Android 的 Qt/C++ 应用程序中将屏幕设置为横向或纵向模式。
可以使用 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);
您不需要通过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);
}
}
我正在使用 Qt 和 C++ 开发 android 应用程序。我的整个应用程序都是纵向 orientation.But 当我播放视频时我想将方向更改为横向,并且在视频结束后它应该再次更改为纵向。
所以问题是如何在 Android 的 Qt/C++ 应用程序中将屏幕设置为横向或纵向模式。
可以使用 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);
您不需要通过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);
}
}