Android TV - 模拟器上的电视应用程序,但Android Box上的完整/移动应用程序

时间:2017-07-31 23:49:44

标签: android android-emulator android-tv

当我测试我的应用时:

  • 电视模拟器:按预期行事,出现横幅,我收到“电视”应用。
  • Android Box(Wetek Play 2,Lolipop 5.1.1):“非电视”应用,没有横幅。

的AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-feature android:name="android.software.leanback" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

<application
    android:name="removed"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:supportsRtl="true"
    android:hardwareAccelerated="true"
    android:banner="@mipmap/banner"
    android:theme="@style/AppTheme">

    <activity
        android:name=".MyActivity"
        android:theme="@style/SplashAppTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
        </intent-filter>
    </activity>
...

我也有这个函数在模拟器上返回 true ,在框中返回 false

public boolean isTvApp() {

    PackageManager pm = getPackageManager();
    UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);

    boolean isTvAsRecommendedByGoogle = uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION;
    @SuppressWarnings( "deprecation" )
    boolean isTv01 = android.os.Build.VERSION.SDK_INT == 21 && pm.hasSystemFeature(PackageManager.FEATURE_TELEVISION);
    boolean isTv02 = android.os.Build.VERSION.SDK_INT >= 21 && pm.hasSystemFeature(PackageManager.FEATURE_LIVE_TV);
    boolean hasTouchScreen = pm.hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN);
    boolean hasLeanback = android.os.Build.VERSION.SDK_INT >= 21 && pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK);

    return
            isTvAsRecommendedByGoogle ||
            isTv01 ||
            isTv02 ||
            !hasTouchScreen ||
            hasLeanback;

}

如何让横幅在Android框上工作/显示?

如何让isTvApp()为Android框工作?

1 个答案:

答案 0 :(得分:0)

我相信原因

UI_MODE_TYPE_TELEVISION == false
FEATURE_TELEVISION == false
FEATURE_LIVE_TV == false
FEATURE_TOUCHSCREEN == true

是因为(大多数?)android盒有可能使用鼠标(和键盘)。

鼠标基本上提供了触摸屏的功能。


我相信我们需要将android盒子比起TV-app盒子更多地看作是一台计算机。

我很确定Android盒子制造商设置了FEATURE_TOUCHSCREEN == true(尽管没有触摸屏),以便他们的用户可以访问所有应用程序(而不仅仅是具有{{ 1}})。

考虑到这一点,我不确定是否最好将所有Android Box都视为Android TV。 (您可能会将功能限制为像计算机一样实际使用它的用户。)