Android Developers:处理在电视上不支持的功能

电视远不同于其它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!"); 
} 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值