从Android应用程序中识别GoogleTv

10

在Java代码中,Android应用程序是否可以判断自己运行在Google TV上还是平板电脑或手机上?


1
由于在撰写本文时我们无法为 Google TV 编写应用程序,所以答案是“如果您的 Java 代码正在运行,则不在 Google TV 上”。我建议在我们可以为 Google TV 编写应用程序之后再次提问。 - CommonsWare
我碰巧有一个“鱼缸”设备。我会编辑问题以反映这一点。 - miguel
4个回答

10

你可以向包管理器提出问题:

/**
 * Test if this device is a Google TV.
 * 
 * See 32:00 in "Google I/O 2011: Building Android Apps for Google TV"
 * http://www.youtube.com/watch?v=CxLL-sR6XfM
 * 
 * @return true if google tv
 */
public static boolean isGoogleTV(Context context) {
    final PackageManager pm = context.getPackageManager();
    return pm.hasSystemFeature("com.google.android.tv");
}

增加这个清单行:

<uses-feature android:name="com.google.android.tv" android:required="false" />

6
根据官方文档的说明:
推荐的确定应用程序是否在电视设备上运行的方法是使用UiModeManager.getCurrentModeType()方法来检查设备是否在电视模式下运行。以下示例代码向您展示如何检查应用程序是否在电视设备上运行:
public static final String TAG = "DeviceTypeRuntimeCheck";

UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {
    Log.d(TAG, "Running on a TV Device");
} else {
    Log.d(TAG, "Running on a non-TV Device");
}

5
以下链接可能会对您有所帮助:Google TV Android开发者指南。为了优化您的应用程序以适应Google TV,只需添加一个额外的大屏幕布局即可。但是,如果您想在运行时确定当前使用应用程序的设备,可以尝试使用hasSystemFeature()方法。通过这种方式,您可以测试某些硬件功能,这些功能是Google TV独有的(例如,您可以测试FEATURE_TOUCHSCREEN,因为除Google TV之外的任何设备都有一个 <=> 如果不支持该功能,则该应用程序可能正在电视上运行)。

难道没有那种低端的仅有轨迹球而且没有触摸屏的手机吗? - miguel
2
这里有一些电视上不存在的功能。如果你将它们结合起来,你就可以相当确定你的应用程序运行在哪种类型的设备上。但我不能肯定,因为我没有自己的Google TV。 - Martin Matysiak
1
@miguel:目前所有配备Android市场的手机都需要有触摸屏,因为这是CDD要求的。但这并不排除没有市场、安装盗版市场的手机或未来对CDD的更改。 - CommonsWare

1

以下是我收集反馈有用信息的方法。我不确定是否能检测设备类型(电话、平板电脑、Google TV),但可以构建某种映射数据库,并将信息与之匹配。

private String getDeviceInfo() {
    final StringBuilder sb = new StringBuilder("\n\n---\n");
    try {
        sb.append("Version: ").append(getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName)
                .append('\n');
    } catch (final NameNotFoundException e) {
        // Shouldn't happen but if did - ignore
        Log.e(TAG, "failed to get app version", e);
    }
    sb.append("Model: ").append(Build.MODEL).append('\n');
    sb.append("Brand: ").append(Build.BRAND).append('\n');
    sb.append("Device: ").append(Build.DEVICE).append('\n');
    sb.append("Display: ").append(Build.DISPLAY).append('\n');
    sb.append("Hardware: ").append(Build.HARDWARE).append('\n');
    sb.append("Manufacturer: ").append(Build.MANUFACTURER).append('\n');
    sb.append("Host: ").append(Build.HOST).append('\n');
    sb.append("Release: ").append(Build.VERSION.RELEASE).append('\n');
    sb.append("Board: ").append(Build.BOARD).append('\n');
    sb.append("Radio: ").append(Build.RADIO).append('\n');
    sb.append("Product: ").append(Build.PRODUCT).append('\n');
    return sb.toString();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接