2016-12-12 12 views
1

アプリは、携帯電話とタブレットでポートレートモードを使用するように設計されています。私はランドスケープモードが必要なAndroid TVをサポートしようとしているので、私のアプリはAndroidのテレビであるかどうかに基づいて異なるレイアウトを使用しています。Android TVの携帯電話/タブレット用のポートレートモードとランドスケープモード?

問題は、Googleが「ポートレート」機能を使用するAndroid TVのアプリを拒否してしまうことです。携帯電話やタブレットでは「ポートレート」を維持し、同じAPKのテレビでのみランドスケープに切り替えるにはどうすればよいですか? 2つの異なるAPKを作成するには、これを行う唯一の方法はありますか?私は可能ならばこれを避けたい。

PS。私はUnity 3Dを使用しています。これは、より曖昧な解決のいくつかを制限するかもしれません。

答えて

1

デバイスが電話/タブレットかテレビかに基づいて、コードからスクリーンモードを設定できます。

最初のステップは、このアプリがテレビや携帯端末で動作しているかどうかを確認することです。Androidでこれを行うための公式のAPIはありませんが、this投稿は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プレーヤー設定を設定することもできます。

+0

これで、プレーヤーの設定で[デフォルトの方向]を[自動]に設定する必要がありますか?もしそうなら、ユーザーは自分の電話機を回転させると、電話機は向きを変えるでしょうか? – Yuyo

+1

** "これは、プレーヤーの設定で"デフォルト方向 "を自動に設定する必要がありますか?**私はそれについてはわかりません。あなたはAndroidデバイスですぐにそれをテストして何が起こるかを見ることができます。 **もしそうなら、ユーザーが携帯電話を回転させたときに電話機が向きを変えるのだろうか?**再び、ユーザーが自分の電話機を回転させたときにそれが変化するかどうかを調べる必要があります。その場合は、私の解決策[ここ](http://stackoverflow.com/a/38790423/3785314)を使用して問題を解決することができます。方向を設定した後にその関数を呼び出すだけです。 – Programmer

+0

パーフェクト、これは動作しているようです。ありがとう! – Yuyo

関連する問題