从 Android 应用识别 GoogleTv
Posted
技术标签:
【中文标题】从 Android 应用识别 GoogleTv【英文标题】:Identify GoogleTv from Android app 【发布时间】:2011-09-06 17:49:08 【问题描述】:android 应用有没有办法在 Java 代码中判断它是在 GoogleTV 上运行还是在平板电脑或手机上运行?
【问题讨论】:
由于在撰写本文时,我们无法为 Google TV 编写应用程序,因此答案是“如果您的 Java 代码正在运行,那么它不在 Google TV 上”。我建议在我们可以为 Google TV 编写应用程序后再次询问。 我碰巧有一个“鱼缸”设备。我将编辑问题以反映这一点。 【参考方案1】:您可以询问包管理器:
/**
* 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" />
【讨论】:
【参考方案2】:根据oficial docs:
确定您的应用是否在电视设备上运行的推荐方法是使用 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");
【讨论】:
【参考方案3】:以下链接可能对您有所帮助:Google TV Android Developer's Guide 要针对 Google TV 优化您的应用,只需为大屏幕添加额外的层。但是,如果您想在运行时确定当前正在使用该应用程序的设备,您可以尝试hasSystemFeature() 方法。有了它,您可以测试某些特定于 Google TV 的硬件功能(例如,您可以测试 FEATURE_TOUCHSCREEN,因为除 Google TV 之外的任何设备都有一个 如果该功能不受支持,则该应用程序可能正在电视上运行) .
【讨论】:
难道没有没有触摸屏的低端轨迹球手机吗? Here 是一些电视上不存在的功能。如果将它们结合起来,您可以非常确定您的应用程序在哪种类型的设备上运行。但我不能肯定地说什么,因为我自己没有 Google TV。 @miguel:目前,所有合法安装了 Android Market 的手机都有触摸屏,这是 CDD 所要求的。不过,这并不排除没有 Market 的手机、带有盗版 Market 的手机或 CDD 的未来变化。【参考方案4】:以下是我为反馈收集有用信息的方式。我不知道是否可以检测设备的类型(电话、桌子、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();
【讨论】:
以上是关于从 Android 应用识别 GoogleTv的主要内容,如果未能解决你的问题,请参考以下文章