手机/平板电脑的纵向模式和Android TV的横向模式?

我的应用被设计为在手机和平​​板电脑中使用肖像模式。 我试图支持需要横向模式的Android TV,因此我的应用现在根据设备是否为Android TV使用不同的布局。

问题在于Google拒绝使用“肖像”功能的Android TV应用。 我怎样才能保持手机/平板电脑的“肖像”,并切换到只使用相同APK的电视? 唯一能做到这一点的方法是制作两个不同的APK? 如果可能,我想避免这种情况。

PS。 我正在使用Unity 3D,这可能会限制一些比较模糊的解决方案。


您可以根据设备是手机/平板电脑还是电视机,从代码中设置屏幕模式。

第一步是检查这个应用程序是否在电视或移动设备上运行。在Android上没有官方的API可以这样做,但是这篇文章描述了如何使用AndroidJavaClass作为插件。

bool isAndroidTv()
{
    #if !UNITY_ANDROID || UNITY_EDITOR
    return false;
    #else

    AndroidJavaClass unityPlayerJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject androidActivity = unityPlayerJavaClass.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass contextJavaClass = new AndroidJavaClass("android.content.Context");
    AndroidJavaObject modeServiceConst = contextJavaClass.GetStatic<AndroidJavaObject>("UI_MODE_SERVICE");
    AndroidJavaObject uiModeManager = androidActivity.Call<AndroidJavaObject>("getSystemService", modeServiceConst);
    int currentModeType = uiModeManager.Call<int>("getCurrentModeType");
    AndroidJavaClass configurationAndroidClass = new AndroidJavaClass("android.content.res.Configuration");
    int modeTypeTelevisionConst = configurationAndroidClass.GetStatic<int>("UI_MODE_TYPE_TELEVISION");

    return (modeTypeTelevisionConst == currentModeType);
    #endif
}

然后,您可以使用Screen.orientationAwake功能中更改屏幕方向:

void Awake()
{
    bool androidTv = isAndroidTv();
    Screen.autorotateToLandscapeLeft = androidTv;
    Screen.autorotateToLandscapeRight = false;
    Screen.autorotateToPortrait = !androidTv;
    Screen.autorotateToPortraitUpsideDown = false;

    if (androidTv)
    {
        Screen.orientation = ScreenOrientation.LandscapeLeft;
    }
    else
    {
        Screen.orientation = ScreenOrientation.Portrait;
    }
}

您可以在“游戏控制器”对象中使用此对象,该对象设置为在脚本顺序设置中尽早运行。

另外,您需要设置Android播放器设置以将默认方向设置为自动旋转。

链接地址: http://www.djcxy.com/p/37961.html

上一篇: Portrait mode for Phones/Tablets and Landscape mode for Android TV?

下一篇: Android Layout Folder for Devices/Tablets which are always in Landscape