androidTV相关开发指导1

谷歌电视相关开发api

#### google tv 1 设置tv App

1.升级开发工具到最新版本

2.manifest设置

 2.1 android:theme="@style/Theme.Leanback"

 2.2 <category android:name="android.intent.category.LEANBACK_LAUNCHER" />

<activity

    android:name="com.example.android.TvActivity"

    android:label="@string/app_name"

    android:theme="@style/Theme.Leanback">

    <intent-filter>

      <action android:name="android.intent.action.MAIN" />

      <category android:name="android.intent.category.LEANBACK_LAUNCHER" />

    </intent-filter>

  </activity>

 

3 触屏支持 不支持触屏操作

<uses-feature android:name="android.hardware.touchscreen"

              android:required="false" />

  

  

4. 提供一个横幅用于所有的activity,或者针对每一个activity设置属性

<application

    ...

    android:banner="@drawable/banner" >

    ...

</application>

5.添加Android TV 支持库 目录 <sdk>/extras/android/support/

5.1 v17 leanback library  提供tv用户界面部件,特别用于媒体应用

5.2 v7 recycleview library 高效管理长列表内容内存,leanback需要

5.3 v7  cardview library 显示信息卡片 特别是媒体图片和描述

但是,以上支持库不是必须使用的,但是推荐在媒体分类的浏览的应用中使用。

如果你使用了leanback 包,就不用使用 v4包,v7reycle包河v17 leanbackback

包。

v17包包含一些资源文件,必须把那些资源文件导入到你的app。

和v7包的加入方式一样:https://developer.android.com/tools/support-library/setup.html#libs-with-res

6 硬件相关检测 api13

UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);

if (uiModeManager.getCurrentModeType()==Configuration.UI_MODE_TYPE_TELEVISION) {

 // tv 模式

}else if (uiModeManager.getCurrentModeType()==Configuration.UI_MODE_TYPE_CAR) {

//汽车

}

7.在tv上,不支持的硬件特性

触屏操作 , 拨打电话,视频,近场通信,gps定位,麦克风支持

Hardware Android feature descriptor

--------------------------------------------------------------------------------

Touchscreen android.hardware.touchscreen

Telephony android.hardware.telephony

Camera android.hardware.camera

Near Field Communications (NFC) android.hardware.nfc

GPS android.hardware.location.gps

Microphone android.hardware.microphone

设置:

<uses-feature android:name="android.hardware.touchscreen"

        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.gps"

        android:required="false"/>

<uses-feature android:name="android.hardware.microphone"

        android:required="false"/>

如果,设置为true,你的程序可能就不会出现在电视设备选项,和出现在tv设备的主屏幕上。

8. 权限permissions 和硬件特性

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

8.1 检查系统是否支持这些硬件特性

// 检查是否支持电话特性

if (getPackageManager().hasSystemFeature("android.hardware.telephony")) {

    Log.d("HardwareFeatureTest", "Device can make phone calls");

}

// 检查是否支持屏幕滑动

if (getPackageManager().hasSystemFeature("android.hardware.touchscreen")) {

    Log.d("HardwareFeatureTest", "Device has a touch screen.");

}

8.2 Touch screen android不支持的触摸屏,因为电视观看环境不统一。

8.3 Camera ,虽然没有摄像头功能,但是还是支持图片的查看和编辑。

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

// Check if the camera hardware feature is available.

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.");

}

8.4 GPS功能

android不支持GPS功能,但是你还是可以要求用户搜索一个地址配置到电视设备上。,

// 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);

}

9 手持设备电视控制器 Handling Controllers

  

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章