当前位置: 代码迷 >> Android >> Android Develops:处置在电视上不支持的功能
  详细解决方案

Android Develops:处置在电视上不支持的功能

热度:62   发布时间:2016-04-28 07:39:03.0
Android Develops:处理在电视上不支持的功能

电视远不同于其它Android设备: 

  • 它们不是移动电话。 

  • 处于习惯,用户使用很少它们观看媒体,或者没有交互。 

  • 任何在一定距离外和它们进行交互。 

因为电视和其它设备有着不同的目的,它们通常没有其它Android设备都有的硬件功能。由于这个原因,Android系统对电视设备不支持下面的功能: 

硬件 

Android功能描述符号 

照相机 

android.hardware.camera 

GPS 

android.hardware.location.gps 

麦克风 

android.hardware.microphone 

进场通讯(NFC) 

android.hardware.nfc 

电话 

android.hardware.telephony 

触摸屏 

android.hardware.touchscreen 

这节课程向你展示了如何解决在电视上不可用的功能问题: 

  • 提供要解决的不支持的功能。 

  • 检查在运行时支持的功能,并且根据这些功能的可用性,有条件的激活/停用整个代码路径。 

 

解决在电视上不支持的功能 

———————————————————————————————————————— 

Android对电视设备不支持触屏交互,大部分电视没有触摸屏,并且使用触摸屏和电视交互不符合100英寸的环境。由于这些原因,用户使用遥控和Andorid电视交互。考虑到这一点,确保你的应用中的所有控件使用D-pad能被访问。回顾前面两节课程Optimizing Layouts for TV和Optimize Navigation for TV查看关于这个主题的更多信息。Android系统假设设备有一个触摸屏,所以如果你想你的应用程序运行在电视上,你必须在你的清单文件中明确的取消触摸屏要求: 

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

尽管电视没有照相机,你仍然可以在电视上提供关于照相的应用。例如,如果你又一个拍摄、查看和编辑照片的应用,你可以针对电视禁止它的拍照功能,并且仍然允许用户查看和编辑照片。下一节会谈到关于如何基于运行的设备类型的检测,禁止或激活在应用程序中的特定功能。 

因为电视是静止的,室内设备,它们没有内置GPS。如果你的应用程序使用定位信息,在电视设置中配置,允许用户搜索一个位置,或者使用“静态”位置提供者从压缩码中获取位置。 

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); Location location = locationManager.getLastKnownLocation("static"); Geocoder geocoder = new Geocoder(this); Address address = null;  try {   address = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1).get(0);   Log.d("Zip code", address.getPostalCode());  } catch (IOException e) {   Log.e(TAG, "Geocoder error", e); } 

电视通常不支持麦克风,但是如果你又一个使用了声控的应用程序,你能开发一个移动设备app获取声音输入,然后作为电视的一个远程控制 

 

在运行时检测可用的功能 

—————————————————————————————————————————————————————————————

检测一个功能在运行时是否可用,调用hasSystemFeature(String)。这个方法拥有一个参数:一个你想检测的功能相应的字符串。例如,检测触摸屏,使用FEATURE_TOUCHSCREEN参数调用hasSystemFeature(String)。 

下面的代码段演示了如何基于支持的功能在运行时检测设备类型: 

// Check if android.hardware.telephony feature is available. if (getPackageManager().hasSystemFeature("android.hardware.telephony")) {    Log.d("Mobile Test", "Running on phone"); // Check if android.hardware.touchscreen feature is available. } else if (getPackageManager().hasSystemFeature("android.hardware.touchscreen")) {    Log.d("Tablet Test", "Running on devices that don't support telphony but have a touchscreen."); } else {     Log.d("TV Test", "Running on a TV!"); } 

这仅仅是一个运行时基于电视不支持特色的检测,来禁止应用功能的一个例子。

  相关解决方案