AndroidManifest.xml檔案中(uses-feature)解釋
語法(SYNTAX):
<uses-featureandroid:name="string"android:required=["true" | "false"]
android:glEsVersion="integer"/>
被包含於(CONTAINED IN):
<manifest>
說明(DESCRIPTION):
這個元素用於宣告一個單獨的被應用程式使用的硬體或軟體功能。
<uses-feature>宣告的目的是通知其他外部實體,該應用程式所依賴的硬體和軟體功能。這個元素提供的required屬性會讓你指定應用程式在所需的功能不存在時,應用程式是否能夠正常執行。因為功能能夠所支援的Android裝置不同,所以<uses-feature>元素被用於描述應用程式所依賴的、重要的、可用的裝置功能。
應用程式所宣告的一組可用功能對應著一組由Android的PackageManager類定義的可用的功能常量,為了方便,這些常量會在《Google Play和基於功能的過濾》的“功能參考”表中被列出。
如果應用程式需要多個功能,就要分別使用<uses-feature>元素來指定所需的每一個功能,例如:需要裝置中帶有藍芽和camera功能的應用程式,要宣告兩個<uses-feature>元素:
<uses-feature android:name="android.hardware.bluetooth" /><uses-feature android:name
通常應該確保使用<uses-feature>元素來宣告應用程式所需的所有功能。
被宣告的<uses-feature>元素只是資訊化的,這意味著Android系統本身在安裝應用程式之前,不會檢查裝置上所支援的功能的匹配性。但是其他的服務(如Google Play)或應用程式可以檢查該應用程式的<uses-feature>宣告,把它作為與該應用程式互動的一部分。由於這個原因,宣告應用程式要使用的所有的外部功能是至關重要的。
對於某些功能,有可能存在一個特定的屬性,以便定義功能的版本,如被使用的
儘管<uses-feature>元素只在執行API Level 4或更高的版本上才有效,但是還是推薦在所有的應用程式中包含這個元素,即使minSdkVersion的值是3或更低的版本,那麼這些執行舊的平臺版本的裝置會簡單忽略掉這個元素。
注意:在宣告一個功能時,要記住必須申請相應的許可權。例如,在應用程式能夠訪問Camera的API之前,必須申請CAMERA許可權。申請許可權是讓應用程式能夠訪問相應的軟/硬體,而宣告應用程式所使用的功能是為了確保正確的裝置相容性。
屬性(ATTRIBUTES):
android:name
這個屬性用描述性的字串,指定該應用程式所使用的軟/硬體功能。有效描述符在《Google Play和基於功能的過濾》的“硬體功能”和“軟體功能”表中被列出。
android:required
這個屬性用一個布林值來指定應用程式是否需要在android:name屬性中所指定的功能。
true:在裝置上不存在指定的功能時,則該應用不能夠正常執行。
false:如果裝置上存在指定的功能,則應用程式會傾向使用這個功能,但是如果需要,也可設計成沒被指定的功能也能夠正常執行。
如果沒有宣告,這個屬性的預設值是true。
android:qlEsVersion
這個屬性用於宣告應用程式所需要的OpenGL ES的版本。它的高16位代表主版本號,低16位代表次要版本號,如:要是指定OpenGL ES的版本號是2.0,那麼就要設定為0x00020000。要指定的OpenGL ES的版本號是2.1,就要設定為0x00020001。
應用程式在它的清單中應該最多隻能指定一個android:glEsVersion屬性,如果指定了多個,那麼只會使用版本最高的那個android:glEsVersion屬性,而其他的將會被忽略。
如果應用程式沒有指定一個android:glEsVersion屬性,那麼就假定應用程式僅需要OpenGL ES1.0,它是在所有的Android裝置上都支援的版本。
應用程式能夠假設,如果一個平臺支援設定的OpenGL ES版本,那麼它還會支援所有被設定版本低的OpenGL ES版本,因此,需要OpenGL ES1.0和OpenGL ES2.0的應用程式,必須要指定它所需要的版本時OpenGL ES2.0。
能夠用任何版本的OpenGL ES來工作的應用程式,應該僅指定應用所需的最低版本的OpenGL ES。(應用程式能夠在執行時檢查較高版本的OpenGL ES是否可用。)
被引入的版本(INTRODUCED IN):
API Level 4
接下來的幾個硬體特徵對於遊戲開發是非常有用的。
android.hardware.touchscreen.multitouch:它要求裝置有一個多點觸控的螢幕以支援基本的多點觸控互動,就如收縮(放大)影象比例。這些型別的螢幕跟蹤多個手指的能力都有所不同,所以你必須確保這個螢幕的效能是能夠支援的遊戲進行。
android.hardware.touchscreen.multitouch.distinct: 這是一個多點觸控的兄弟屬性,它要求提裝置供完整的多點觸控功能。
我們將會在接下來的章節片段中看到多點觸控。現在只要記住在當你的遊戲需要一個支援多點觸控的螢幕的時候,我們可以使用 <uses-feature>元素來剔除所有不支援多點觸控的裝置,就像下面這樣:
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="true"/>
另外一個在遊戲開發中非常有用的是去指定需要的OpenGL ES版本。在本書中,我們只關心OpenGL ES1.0和OpenGL ES1.1就可以了。由於這2者基本上沒有什麼不同,所以我們也不用去指定<uses-feature>了。然而,有些裝置支援更強大的OpenGL ES2.0
如果你的遊戲需要更強大的圖形處理能力,我們可以指定OpenGL ES 2.0,然後我們的遊戲只會被支援OpenGL ES 2.0的裝置所看見。注意,在本書中不會使用OPenGL ES 2.0, 我們只是過濾那些不能提供足夠圖形處理能力的裝置。下面顯示了我們怎麼去實現它。
<uses-feature android:glEsVersion="0x00020000" required="true"/>
它將使我們的遊戲只被支援OPenGL ES 2.0 和 假裝有相當的圖形處理能力的裝置所看到。
NOTE: 有些裝置所反映的效能特徵是不正確的,所以開發你的應用的時候儘量去支援各種不同的裝置。要謹慎使用<uses-feature>。
現在就以硬體而言,你的應用已經直接地減少了許多安裝量,這將直接影響到你應用的銷量。所以當你定義<uses-feature>之前請慎重考慮。舉個例子,如果你的遊戲需要有多點觸控的支援,但是我們也可以思考另外一種方法,是遊戲能夠在支援單點觸控的裝置上執行良好,我們就可以寫2個路徑的程式碼,分別在兩種裝置上執行。