Android TV Studuy1-2

Handling TV Hardware
处理电视的硬件


电视的硬件和其他的android 设备有本质上的区别。电视没有一些其他android 设备有的东西,例如触摸屏,摄像头,gps接收器。
电视同时也完全的依靠中等硬件设备。为了让用户和电视应用交互,他们必须使用远程控制或者游戏pad。
当你建立一个TV的app的时候,你必须小心的考虑硬件的限制和在tv硬件操作的需求。


这个课程告诉你怎么去检查你app是否运行在TV上面,怎么去处理不支持的硬件特性feature,同时讨论处理TV设备的控制器的需求


---------------
检查TV设备。
如果你穿件的app 将会TV设备和其他的设备上面运行,那么你可能需要检查当前运行app的设备是什么设备。
例如,如果你有一个app 可以通过Intent 来启动,你的应用应该检查设备的属性来决定是否应该启动改一个TV-oriented activity 还是一个手机的


acvitity


建议的方法是使用UiModeManager.getCurrentModeType() 方法去检查设备是否运行在TV mode。
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")
}
检查TV设备。
----------------


----------------
处理不支持的硬件特性features
依据你app的设计和功能,你可能能处理一些不支持的hardware feature 硬件特性。
这部分讨论那些feature 是不适合TV的,怎么检测缺失的硬件特性,加你替代显示使用这些特性
不支持的硬件特性:
电视和其他设备相比有不同的目的,所以他们没有一些其他android支持设备有的。有了这个原因,android 系统不支持下面的特性:
Hardware Android feature descriptor
Touchscreen android.hardware.touchscreen
Touchscreen emulator android.hardware.faketouch
Telephony android.hardware.telephony
Camera android.hardware.camera
Near Field Communications (NFC) android.hardware.nfc
GPS android.hardware.location.gps
Microphone [1] android.hardware.microphone
Sensors android.hardware.sensor
[1] Some TV controllers have a microphone, which is not the same as the microphone hardware feature described here. The controller 


microphone is fully supported.
注意有一些TV有遥控器的麦克,这个和我们上面的麦克是不同,遥控器麦克是全部支持的。
See the Features Reference for a complete list of features, subfeatures, and their descriptors.




声明TV硬件需求
Android 应用可以声明硬件特性需求在应用的清单文件中,这样的话,如果设备上面不具备这个特性的话,就不会安装在该设备上面。
如果你正在将一个现有的应用扩展到TV上面,密切的复查你的应用的清单文件的任何的硬件需求声明,这些声明可能会阻止你的应用安装在TV设备上面。


如果你的应用使用了硬件特性,例如触摸屏或者摄像头,这些在TV上面不适合的,但是可以操作不需要这些特性,修改你的清单文件将这些特性表示为not 


required。下面这些指出怎么声明你的应用步需要一些硬件特性他们不适合TV 设备,虽然你的应用可能使用到这些特性在非tv的设备上面。
<uses-feature android:name="android.hardware.touchscreen"
        android:required="false"/>
<uses-feature android:name="android.hardware.faketouch"
        android:required="false"/>
<uses-feature android:name="android.hardware.telephony"
        android:required="false"/>
<uses-feature android:name="android.hardware.camera"
        android:required="false"/>
<uses-feature android:name="android.hardware.nfc"
        android:required="false"/>
<uses-feature android:name="android.hardware.location.gps"
        android:required="false"/>
<uses-feature android:name="android.hardware.microphone"
        android:required="false"/>
<uses-feature android:name="android.hardware.sensor"
        android:required="false"/>
Note: Some features have subfeatures like android.hardware.camera.front, as described in the Feature Reference. Be sure to mark as 


required="false" any subfeatures also used in your app.
注意:一些特性有一些子特性,例如前置摄像头,确定将所有的子特性的required


所有的将要啊装在TV设备上面的应用必须声明touch screen 特性为false,就像前面一章里面说的。如果你的应用使用了一个或者几个上面列出的feature


,请将required 设置为true。
注意:声明一个硬件特性为required,将会阻止你的应用安装在V设备上面或者出现在Anroid的主屏幕launcher上面。


一旦你决定了去将硬件特性设置为可选的在你的app中,你必须在运行时检查这些特性是否可用同时适时地调整你应用的行为。
在下面一节讨论怎么检查硬件特性并且建议一些方法来改变你的应用的行为。


声明一些权限,这些权限用来指示硬件特性。
+++++++++++++++这里多了一个from++++++++++
一些uses-permission 清单文件声明 意味硬件特性。这个行为意味着在你的应用里面请求一些权限会使得你的应用不会在安装和使用TV设备上面。
下面的蟾宫请求权限创建了一个暗指硬件特性请求;
Permission Implied hardware feature
RECORD_AUDIO android.hardware.microphone
CAMERA android.hardware.camera and 
android.hardware.camera.autofocus
ACCESS_COARSE_LOCATION android.hardware.location and 
android.hardware.location.network
ACCESS_FINE_LOCATION android.hardware.location and 
android.hardware.location.gps


对于一个全部的权限列表请求暗示着一个硬件特性请求,查看uses-feature guide
.如果你的应用,请求了一个上面列表中的应用,将一个uses-feature包含在你的清单文件为了暗示硬件特性的,这个硬件特性被标识为not required


(android:required="false").


检查硬件特性:
Android 框架可以告诉你是否硬件特性适合你现在运行的设备。使用hasSystemFeature(String) 方法去检查运行时的特定属性。
这个方法使用一个单独的参数,这个参数指定了需要检查的特性。
// Check if the telephony hardware feature is available.
if (getPackageManager().hasSystemFeature("android.hardware.telephony")) {
    Log.d("HardwareFeatureTest", "Device can make phone calls");
}


// Check if android.hardware.touchscreen feature is available.
if (getPackageManager().hasSystemFeature("android.hardware.touchscreen")) {
    Log.d("HardwareFeatureTest", "Device has a touch screen.");
}


Touch screen:触摸屏
因为TV没有触摸屏,所以Android 在电视设备上面不支持触摸屏。还有,使用触摸屏也步显示,因为用户一般是坐在离显示屏10英寸远的地方。
保证你的UI项目和文字部分没有请求和使用触摸屏


在电视设备上面,你应该设计你的应用支持电视遥控器的上下左右键。更多的请查看Creating TV Navigation。就是1-4的内容。


摄像头:
虽然,一个TV电视标准上是没有摄像头的,你还是可以提供一个相片相关的应用的。例如你有一个应用可以拍照片,查看照片以及编辑照片,你可以将拍照


的功能在电视端禁用,同时允许用户去查看甚至编辑照片。如果你决定允许你的摄像头相关应用在TV电视端运行,将下面的特性申明添加进去。
<uses-feature android:name="android.hardware.camera" android:required="false" />
如果你允许你的应用运行的时候没有摄像头,那么添加相关的代码到你的应用,这些代码可以检测摄像头特性是否使用同时做出相应的操作。
下面的代码实例演示了怎么检测摄像头的存在。
if (getPackageManager().hasSystemFeature("android.hardware.camera")) {
    Log.d("Camera test", "Camera available!");
} else {
    Log.d("Camera test", "No camera available. View and edit features only.");
}


GPS,TVs 电视是固定的,在房子里面的设备,没有穿件内部的GPS接受者,
如果你的应用使用地址信息,你可以允许用户去搜索地址,或者使用一个静态地址提供者例如zip code(邮政编码),这个zip code(邮政编码) 是在TV


设备安装的时候配置的。
// Request a static location from the location manager
LocationManager locationManager = (LocationManager) this.getSystemService(
        Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation("static");


// Attempt to get postal or zip code from the static location object
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);
}


处理不支持的硬件特性features
----------------




----------------
处理控制器






处理控制器
----------------


















































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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值