Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中更改特定页面的方向 我在QT和C++中使用Android应用程序。我的整个应用程序都是纵向的。但当我播放视频时,我想将方向更改为横向,视频结束后,应该再次更改为纵向_Java_Android_C++_Qt_Qtandroidextras - Fatal编程技术网

Java 在android中更改特定页面的方向 我在QT和C++中使用Android应用程序。我的整个应用程序都是纵向的。但当我播放视频时,我想将方向更改为横向,视频结束后,应该再次更改为纵向

Java 在android中更改特定页面的方向 我在QT和C++中使用Android应用程序。我的整个应用程序都是纵向的。但当我播放视频时,我想将方向更改为横向,视频结束后,应该再次更改为纵向,java,android,c++,qt,qtandroidextras,Java,Android,C++,Qt,Qtandroidextras,因此,问题是如何在Android的Qt/C++应用程序中将屏幕设置为横向或纵向模式。可以使用setRequestedOrientationJava函数更改Android上的屏幕方向,因此您应该从应用程序中调用Java函数。要在Qt Android应用程序中运行Java代码,您应该使用包含Android开发附加功能的模块 您可以使用JNI从C/C++调用Java函数,或者从Java回调C/C++函数 在这里,您可以在静态Java方法中使用它,如: package com.MyApp; publi

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

可以使用
setRequestedOrientation
Java函数更改Android上的屏幕方向,因此您应该从应用程序中调用Java函数。要在Qt Android应用程序中运行Java代码,您应该使用包含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
(“com/MyApp/OrientationChanger”//类名
,“更改”//方法名称
,“(I)本人”//签字
, 0);
要将方向更改为纵向模式,请执行以下操作:

bool retVal = QAndroidJniObject::callStaticMethod<jint>
                        ("com/MyApp/OrientationChanger" // class name
                        , "change" // method name
                        , "(I)I" // signature
                        , 1);
bool retVal=QAndroidJniObject::callStaticMethod
(“com/MyApp/OrientationChanger”//类名
,“更改”//方法名称
,“(I)本人”//签字
, 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);
    }
}
void MyAndroidHelperClass::setScreenOrientation(int方向)
{
QAndroidJniObject activity=QAndroidJniObject::callStaticObjectMethod(“org/qtproject/qt5/android/QtNative”、“activity”、“Landroid/app/activity;”);
if(activity.isValid())
{
activity.callMethod
(“setRequestedOrientation”//方法名称
,“(I)V//签字
,方向);
}
}

如果android屏幕在androidManifest.xml中固定为特定方向,我是否可以更改其方向?我对此不确定。你可以试试。你能用答案中的方法旋转屏幕吗?我现在要试试,所以我问了,因为我在android Manifests中有固定方向的肖像,我正在尝试上面的java代码在qt中改变android中的方向。我还导入了import android.content.pm.ActivityInfo;但我在SetRequestedOrientation中发现source not found错误您是否已将Java文件放在Android软件包源目录中?