<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                > 編寫:[awong1900](https://github.com/awong1900) - 原文:[http://developer.android.com/training/tv/start/hardware.html](http://developer.android.com/training/tv/start/hardware.html) TV硬件和其他安卓設備有實質性的不同。TV不包含一些其他安卓設備具備的硬件特性,如觸摸屏,攝像頭,和GPS。TV也完全依賴于其他輔助硬件設備。為了讓用戶與TV應用交互,他們必須使用遙控器或者游戲手柄。當您創建TV應用時,必須小心的考慮到TV硬件的限制和操作要求。 本節課程討論如何檢查應用是不是運行在TV上,怎樣去處理不支持的硬件特性,和討論處理TV設備控制器的要求。 ### TV設備的檢測 如果你創建的應用同時支持TV設備和其他設備,你可能需要檢測應用當前運行在哪種設備上,并調整應用的執行。例如,如果你有一個應用通過[Intent](http://developer.android.com/reference/android/content/Intent.html)啟動,你的應用應該檢查設備特性然后決定是應該啟動TV導向的[activity](# "An activity represents a single screen with a user interface.")還是手機的[activity](# "An activity represents a single screen with a user interface.")。 檢查應用是否運行在TV設備上,推薦的方式是用[UiModeManager.getCurrentModeType()](http://developer.android.com/reference/android/app/UiModeManager.html#getCurrentModeType())方法檢測設備是否運行在TV模式。下面的示例代碼展示了如何檢查你的應用是否運行在TV設備上: ~~~ 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是典型不可用的,如何去檢測缺少的硬件特性,并且建議替代方法去用這些特性。 ### 不支持的TV硬件特性 TV有不同于其他設備的用途,因此它們沒有一些其他安卓設備通常有的硬件特性。由于這個原因,TV設備的安卓系統不支持以下特性: | 硬件 | 安卓特性描述 | |-----|-----| | 觸屏 | `android.hardware.touchscreen` | | 觸屏模擬器 | `android.hardware.faketouch` | | 電話 | `android.hardware.telephony` | | 攝像頭 | `android.hardware.camera` | | 藍牙 | `android.hardware.bluetooth` | | 近場通訊(NFC) | `android.hardware.nfc` | | GPS | `android.hardware.location.gps` | | 麥克風 **[1]** | `android.hardware.microphone` | | 傳感器 | `android.hardware.sensor` | > **[1]** 一些TV控制器有麥克風,但不是這里描述的麥克風硬件特性。控制器麥克風是完全被支持的。 查看[Features Reference](http://developer.android.com/guide/topics/manifest/uses-feature-element.html#features-reference)獲得完全的特性列表,子特性,和他們的描述。 ### 聲明TV硬件需求 安卓應用能通過在manifest中定義硬件特性需求來確保應用不能被安裝在不提供這些特性的設備上。如果你正在擴展應用到TV上,仔細地審查你的manifest的硬件特性需求,它有可能阻止應用安裝到TV設備上。 即使你的應用使用了TV上不存在的硬件特性(如觸屏或者攝像頭),應用也可以在沒有那些特性的情況下工作,需要修改應用的manifest來表明這些特性不是必須的。接下來的manifest代碼片段示范了如何聲明在TV設備中不可用的硬件特性,盡管你的應用在非TV設備上可能會用上這些特性。 ~~~ <uses-feature android:name="android.hardware.touchscreen" android:required="false"></uses> <uses-feature android:name="android.hardware.faketouch" android:required="false"></uses> <uses-feature android:name="android.hardware.telephony" android:required="false"></uses> <uses-feature android:name="android.hardware.camera" android:required="false"></uses> <uses-feature android:name="android.hardware.bluetooth" android:required="false"></uses> <uses-feature android:name="android.hardware.nfc" android:required="false"></uses> <uses-feature android:name="android.hardware.gps" android:required="false"></uses> <uses-feature android:name="android.hardware.microphone" android:required="false"></uses> <uses-feature android:name="android.hardware.sensor" android:required="false"></uses> ~~~ > **Note**:一些特性有子特性,如`android.hardware.camera.front`,參考:[Feature Reference](http://developer.android.com/guide/topics/manifest/uses-feature-element.html#features-reference)。確保應用中任何子特性也標記為`required="false"`。 所有想用在TV設備上的應用必須聲明觸屏特性不被需要,在[創建TV應用的第一步](http://developer.android.com/training/tv/start/start.html#no-touchscreen)有描述。如果你的應用使用了一個或更多的上面列表上的特性,改變manifest特性的`android:required`屬性為`false`。 > **Caution**:表明一個硬件特性是必須的,設置它的值為`true`可以阻止應用在TV設備上安裝或者出現在安卓TV的主屏幕launcher上。 一旦你決定了應用的硬件特性選項,你必須檢查在運行時那些特性的可用性,然后調整你的應用的行為。下一節討論如何檢查硬件特性和改變應用行為的建議處理。 更多關于filter和在manifest里聲明特性,參考:[uses-feature](http://developer.android.com/guide/topics/manifest/uses-feature-element.html)。 ### 聲明權限會隱含硬件特性 一些[uses-permission](http://developer.android.com/guide/topics/manifest/uses-permission-element.html) manifest聲明隱含了硬件特性。這些行為意味著在應用中請求一些權限能導致應用不能安裝和使用在TV設備上。下面普通的權限請求包含了一個隱式的硬件特性需求: | 權限 | 隱式的硬件需求 | |-----|-----| | [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](http://developer.android.com/guide/topics/manifest/uses-feature-element.html#permissions-features)。如果你的應用請求了上面列表上的特性的任何一個,在manifest中設置它的隱式硬件特性為不需要(`android:required="false"`)。 ### 檢查硬件特性 在應用運行時,Android framework能告訴你硬件特性是否可用。用[hasSystemFeature(String)](http://developer.android.com/reference/android/content/pm/PackageManager.html#hasSystemFeature(java.lang.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."); } ~~~ ### 觸屏 因為大部分的TV沒有觸摸屏,在TV設備上,安卓不支持觸屏交互。此外,用觸屏交互和坐在離顯示器3米外觀看是相互矛盾的。 在TV設備中,你應該設計應用交互模式支持遙控器上的方向鍵(D-pad)操作。更多關于正確地支持TV友好的控制器操作的信息,參考[Creating TV Navigation](http://developer.android.com/training/tv/start/navigation.html)。 ### 攝像頭 盡管TV通常沒有攝像頭,但是你仍然可以提供拍照相關的TV應用,如果應用有拍照,查看和編輯圖片功能,在TV上可以關閉拍照功能但仍可以允許用戶查看甚至編輯圖片。如果你決定在TV上使用攝像相關的應用,在manifest里添加接下來的特性聲明: ~~~ <uses-feature android:name="android.hardware.camera" android:required="false" ></uses> ~~~ 如果在缺少攝像頭情況下運行你的應用,在你的應用中添加代碼去檢測是否攝像頭特性可用,并且調整應用的操作。接下來的示例代碼展示了如何檢測一個攝像頭的存在: ~~~ // 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."); } ~~~ ### GPS TV是固定的室內設備,并且沒有內置的全球定位系統(GPS)接收器。如果你的應用使用定位信息,你仍可以允許用戶搜索位置,或者用固定位置提供商代替,如在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); } ~~~ ### 處理控制器 TV設備需要輔助硬件設備與應用交互,如一個基本形式的遙控器或者游戲手柄。這意味著你的應用必須支持D-pad(十字方向鍵)輸入。它也意味著你的應用可能需要處理手柄掉線和更多類型的手柄輸入。 ### D-pad必須的按鍵 默認的TV設備控制器是D-pad。通常,你可以用遙控器的上,下,左,右,選擇,返回,和Home鍵操作應用。如果你的應用是一個游戲而需要游戲手柄額外的控制,你的應用也應該嘗試允許用D-pad操作。這種情況下,你的應用也應該警告用戶需要手柄,并且允許他們用D-pad優雅的退出游戲。更多關于在TV設備如理D-pad的操作,參考[Creating TV Navigation](http://developer.android.com/training/tv/start/navigation.html)。 ### 處理手柄掉線 TV的手柄通常是藍牙設備,它為了省電而定期的休眠并且與TV設備斷開連接。這意味著如果不處理這些重連事件,應用可能被中斷或者重新開始。這些事件可以發生在下面任何情景中: - 當在看幾分鐘的視頻,D-Pad或者游戲手柄進入了睡眠模式,從TV設備上斷開連接并且隨后重新連接。 - 在玩游戲時,新玩家用不是當前連接的游戲手柄加入游戲。 - 在玩游戲時,一個玩家離開游戲并且斷開游戲手柄。 任何TV應用[activity](# "An activity represents a single screen with a user interface.")受制于斷開連接和重連事件,這些必須在manifest中配置為處理重連事件。。接下來的示例代碼展示了如何打開一個[activity](# "An activity represents a single screen with a user interface.")去處理配置改變,包括鍵盤或者操作設備連接,斷開連接,或者重新連接: ~~~ <activity android:name="com.example.android.TvActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|navigation" android:theme="@style/Theme.Leanback"> <intent-filter> <action android:name="android.intent.action.MAIN" ></action> <category android:name="android.intent.category.LEANBACK_LAUNCHER" ></category> </intent-filter> ... </activity> ~~~ 這個配置改變允許應用通過重連事件繼續運行,比較而言Android framework強制重啟應用會導致一個不好的用戶體驗。 ### 處理D-pad變種輸入 TV設備用戶可能有超過一種類型的控制器來操縱TV。例如,一個用戶可能有基本D-pad控制器和一個游戲控制器。游戲控制器用于D-pad功能的按鍵代碼可能和物理十字鍵提供的不相同。 你的應用應該要處理游戲控制器D-pad的變種輸入,因此用戶不需要通過物理開關控制器去操作你的應用。更多信息關于處理這些變種輸入,參考[Handling Controller Actions](http://developer.android.com/training/tv/start/hardware.html)。 [下一節: 創建TV布局](#)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看