Android TV以纵向模式强制应用

时间:2017-07-19 10:23:31

标签: android android-manifest screen-orientation android-tv

我有一个Android移动应用程序,现在我正在尝试在Android TV模拟器上运行它,但它不响应屏幕方向,它始终处于纵向模式,即使我在代码中处理它(it0s同时工作在手机和平​​板电脑上)..这是我的AndroidManifest文件:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="------">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.VIBRATE" />

<permission android:name="android.permission.REBOOT" />

<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.hardware.camera"
android:required="true" />

<application
    android:name="-----"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher_2"
    android:label="@string/app_nameMain"
    android:launchMode="singleTask"
    android:theme="@style/AppTheme"
    tools:replace="android:label">

<activity
    android:name=".activities.LauncherActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:launchMode="singleTask"
    android:theme="@style/App.Theme.Translucent"
    android:windowSoftInputMode="adjustPan">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:name=".activities.LogInActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:windowSoftInputMode="adjustPan" />
<activity
    android:name=".activities.BrowserManagerActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:theme="@style/MyHomeCustomTheme"
    android:windowSoftInputMode="adjustPan" />

</application>

我也尝试添加这行代码,但它没有帮助:

<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false" />

你有没有类似的经历,或者你有什么想法在这里有什么问题?

2 个答案:

答案 0 :(得分:1)

我认为这与您的应用程序方向配置无关。许多Android电视制作人强迫这种定位为景观。如果您有权访问,则可以检查系统属性并查找x.forceorientation:landscape并进行更改。

一些制作人还提供了设置菜单选项,例如系统设置&gt;显示&gt;旋转

另一种方式,this应用程序可以在某些设备上运行

答案 1 :(得分:0)

我遇到了同样的问题但是使用了真正的电视设备 - 系统完全忽略了旋转(一切都在平板电脑和手机上正常工作)。 我为我的案子找到了解决办法但对你来说不合适。 所以,简短的回答是“不可能的”#34;答案很长:

电视设备的固件经常由制造商调整,在我的情况下是 /system/framework/services.jar 包含 services \ com \ android \ server \ wm \ WindowManagerService.java 其中以下代码处理了旋转大小写:

if ("box".equals(SystemProperties.get("ro.target.product", "tablet"))) {
    rotation = 0;
}

当然 /system/build.prop 设置 ro.target.product = box ,当我尝试修补此文件时(我有根和可能性)重新刷新固件)系统进入了一种启动循环。参数 ro.target.product 在系统应用程序中多次使用,所以我认为在我的情况下最终固件缺少一些额外的代码来处理其他目标模式。因此,我被迫直接修补 classes.dex ,以便关闭此检查。

另一组控制轮换的选项是 persist.demo.hdmirotates persist.demo.hdmirotation ,默认情况下它们已被关闭。当我通过命令行添加它们时:

setprop persist.demo.hdmirotates true
setprop persist.demo.hdmirotation landscape

我得到了理想的行为:我的应用程序选择了必要的方向并且它有效!在我的情况下,电视的旋转取决于布线要求,即电视及其相应插座在墙壁上的相对位置。

所以,没有免费午餐:-(每个设备都应该单独处理。