android - Android电视的手机/平板电脑和 横向模式的肖像模式?

  显示原文与译文双语对照的内容
93 3

我的应用被设计成在手机和平板电脑中使用肖像模式。我试图支持需要 横向模式的Android电视,所以我的应用程序现在使用不同的布局,无论是安卓电视。

问题在于谷歌拒绝使用"纵向"特性的安卓电视应用。如何让"纵向"在手机/平板电脑和 switch 中仅适用于具有相同APK的电视?是唯一的方法来制造两个不同的APKs?如果可能的话,我想避免这种情况。

PS,我使用 Unity,它可能会限制一些比较模糊的解决方案。

时间:原作者:0个回答

63 3

你可以根据设备是电话/平板电脑还是电视来设置屏幕模式。

First是在安卓上运行这个应用程序,或者移动 device.There 没有官方 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
}

然后,你可以在 Awake 函数中使用 Screen.orientation 更改屏幕方向:

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播放器设置以使默认方向设置为自动旋转。

原作者:
...