<uses-feature>

http://developer.android.com/guide/topics/manifest/uses-feature-element.html

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="android.hardware.camera" />

通常應該確保使用<uses-feature>元素來聲明應用程序所需的所有功能。

被聲明的<uses-feature>元素只是信息化的,這意味着Android系統本身在安裝應用程序之前,不會檢查設備上所支持的功能的匹配性。但是其他的服務(如Google Play)或應用程序可以檢查該應用程序的<uses-feature>聲明,把它作爲與該應用程序交互的一部分。由於這個原因,聲明應用程序要使用的所有的外部功能是至關重要的。

對於某些功能,有可能存在一個特定的屬性,以便定義功能的版本,如被使用的Open GL的版本(用glEsVersion來聲明)。而有些功能則不需要指定版本屬性,如照相機,就只使用name屬性來聲明。

儘管<uses-feature>元素只在運行API Level 4或更高的版本上纔有效,但是還是推薦在所有的應用程序中包含這個元素,即使minSdkVersion的值是3或更低的版本,那麼這些運行舊的平臺版本的設備會簡單忽略掉這個元素。

注意:在聲明一個功能時,要記住必須申請相應的權限。例如,在應用程序能夠訪問CameraAPI之前,必須申請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

Google Play和基於功能的過濾(一)

Google Play會過濾出那些對用戶可見的應用程序,因此用戶只能看到和下載那些跟他們的設備兼容的應用程序。通過功能的兼容性是過濾應用程序的方法之一。

Google Play通過把以下兩項內容進行比較,來判斷應用程序跟給定用戶設備是否兼容:

1. 應用程序需要的功能---指應用程序在它自己的清單的<uses-feature>元素中聲明的功能;

2. 在設備上有效的硬/軟件功能---值設備用只讀的系統屬性所報告的它所支持的功能。

爲了確保功能的準確比較,Android包管理器提供了一個共享的功能常量集合,應用程序和設備都使用這些常量來聲明各自所需要和支持的功能。可用的功能常量在本文下面的功能參考表中被列出。

當用戶啓動Google Play時,應用程序通過調用getSystemAvailableFeatures()方法,來查詢包管理器中所列出的設備上可用的功能列表。然後在建立用戶會話的時候,軟件商店(The Store)應用程序會把這個功能列表上傳給Google Play。

每次把應用程序上傳給Google Play的發佈網站時,Google Play都會掃描應用程序的清單文件。它會查找清單中的<uses-feature>元素,並且在某些情況下,會把它們跟其他元素組合在一起來評估,如<uses-sdk>和<uses-permission>元素。在建立了應用程序所需的功能集合之後,Google Play會把這個功能列表做爲跟應用程序的.apk和版本相關聯的內部元數據來保存。

當用戶使用Google Play應用程序查詢或瀏覽應用程序時,服務就會把每個應用程序所需的功能跟用戶設備上可用的功能進行比較。如果應用程序所需要的功能在設備上都存在,那麼Google Play就允許用戶看到該應用程序,並程序潛在的可下載應用程序。如果應用所需的任何一個功能不被設備所支持,Google Play就過濾掉該應用程序,這樣用戶就看不到並且也不能夠下載。

因爲在<uses-feature>元素中聲明的功能直接影響到Google Play如何過濾應用程序,因此理解Google Play是如何評估應用程序的清單和建立需求功能的集合是至關重要的,以下章節會詳細說明。

基於明確聲明功能的過濾

一個明確聲明的功能就是應用程序在其清單中聲明的一個<uses-feature>元素。功能聲明能夠包含一個android:required=[“true”|”false”]屬性(如果在API Leve 5以上的版本上編譯),這個屬性指定了應用程序是否絕對的需要該功能,並且目標設備上不存在該功能時,該應用程序就不能正常的運行(true的場合),或指定應用程序在功能有效的時候就使用該功能,而在該功能無效的時候,應用程序也被設計成可以運行(false的場合)。

Google Play用以下方法來處理明確聲明的功能:

1. 如果一個功能被明確聲明爲時必須的,則Google Play就會把應用程序需要的功能列表添加到一個列表中。然後把列表中的功能需求與用戶設備提供的功能進行比較,從而把應用程序從沒有提供該應用所需功能的設備中過濾掉。例如:

<uses-featureandroid:name="android.hardware.camera"android:required="true"/>

2. 如果一個功能被設計成非必須的功能,Google Play就不會把這樣的功能添加到功能需求列表中。由於這個原因,明確聲明的非必須功能,在Google Play過濾應用程序時就不會被考慮。即使設備不提供該聲明的功能,Google Play依然會認爲該應用程序與設備是兼容的,並允許顯示給用戶,除非使用了其他過濾規則。例如:

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

3. 如果一個功能被明確聲明,但沒有設置android:required屬性,那麼Google Play就會假定該功能是必須的,並且要針對該功能進行過濾。

通常,如果應用程序被設計成要運行在Android1.6或更早的版本上,那麼在API中android:required屬性是無效的,並且Google Play會假定應用程序所聲明的所有的功能<uses-feature>都是必須的。

注意:通過聲明一個包含android:required=”false”屬性的功能,能夠禁止Google Play針對該功能的所有過濾。

Google Play和基於功能的過濾(二)

基於暗示功能的過濾

一個暗示的功能是爲了讓應用程序正確運行所需的功能,但是,這個功能不在清單的<uses-feature>元素中聲明。嚴格的說,應用程序應用始終聲明它所使用和需要的所有功能,因此對於應用程序使用的,但卻沒有聲明的功能,應該被認爲是一個錯誤。但是,出於對用戶和開發者的保護,Google Play會查看每個應用程序的暗示功能,並基於這些功能來過濾應用程序,就像是明確聲明的功能所做的處理一樣。

應用程序可能需要一個功能,但卻不聲明,這是因爲:

1. 應用程序是針對較舊的Android類庫版本(Android1.5或更早)來編譯的,並且<uses-feature>元素是無效的;

2. 開發者錯誤的假設所需要的功能在所有的設備上都存在,而沒有必要聲明;

3. 開發者不小心忽略的該功能的聲明;

4. 開發者明確的聲明瞭該功能,但該聲明是無效的。例如:<uses-feature>元素名的一個拼寫錯誤或給android:name屬性設定一個無法識別的字符串,這些都會導致功能聲明無效。

基於以上原因的考慮,Google Play會嘗試通過檢查清單文件中其他元素的聲明(特別是<uses-permission>元素)來發現被應用暗示的功能需求。

如果一個應用程序申請了硬件相關的權限,那麼Google Play就會假定應用程序要使用底層的硬件功能,並因此而需要那些功能,即使可能沒有響應的<uses-feature>聲明。針對這樣的權限申請,Google Play也會把底層的硬件功能添加到它所保持的對應的應用程序的元數據中,並基於這些信息來過濾要顯示給用戶應用程序。

例如,如果應用程序申請了CAMERA權限,但卻沒有聲明一個對應android.hardware.camera功能的<uses-feature>元素,那麼Google Play就會認爲應用程序需要照相機功能,並且該應用程序不應該顯示給沒有提供照相機功能的那些用戶設備。

如果不想要Google Play基於某個特殊的暗示功能來過濾應用程序,就要禁止這種行爲。通過在其清單文件中明確的聲明<uses-feature>元素,幷包含一個android:required=”false”屬性,可以達到禁止Google Play過濾應用程序的目的。例如:要禁止由CAMERA權限所派生出來的過濾,就要向下面這樣在應用的清單中聲明一個<uses-feature>元素:

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

理解用<uses-permision>元素聲明的權限能夠直接影響Google Play對應用程序的過濾是至關重要的。在下面的“暗示功能需求的權限”章節中,列出了所有的暗示功能需求的權限集,並因此而引發的過濾處理。

對於藍牙功能的特殊處理

Google Play針對藍牙功能來判斷過濾時,它會使用比以上描述稍微不同的規則。

如果應用程序在其清單的一個<uses-permission>元素中聲明瞭一個藍牙權限,但沒有明確的在<uses-feature>元素中聲明藍牙功能,那麼Google Play會檢查應用程序被設計成要運行在哪個Android平臺的版本上,這個版本在<uses-sdk>元素中被指定。

如下表所示,Google Play只會在應用程序把Android2.0API Leve 5)或更高的版本作爲最低版本或目標平臺時,纔會啓用針對藍牙功能的過濾。但是,要注意的是,當應用程序在<uses-feature>元素中明確聲明瞭藍牙功能時,Google Play會使用普通的規則來進行過濾處理。

1Google Play如何判斷申請了藍牙權限但卻沒有在<uses-feature>元素中聲明藍牙功能的應用程序的藍牙功能需求:

minSdkVersion

targetSdkVersion

結果

<=4(或者沒有聲明)

<=4

對於任何報告其支持android.hardware.bluetooth功能的設備,Google Play不會把應用程序過濾掉。

<=4

>=5

對於任何不支持android.hardware.bluetooth功能的設備,Google Play都會把該應用程序過濾掉。

>=5

>=5

以下的例子,基於Google Play處理藍牙功能的方式,演示了不同的過濾效果。

第一個例子,聲明瞭藍牙權限的應用程序被設計成要運行在比較舊的API Level上,但是它沒有在其<uses-feature>元素中聲明藍牙功能。

結果:Google Play不會把應用程序從任何設備上過濾掉。

<manifest ...>
    
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>
    
<uses-sdkandroid:minSdkVersion="3"/>
    ...
</manifest>

第二個例子,相同的應用程序,還聲明瞭一個目標API Level5的屬性。

結果:Google Play會假設應用程序需要藍牙功能,並把應用程序從那些沒有報告支持藍牙功能的設備上過濾掉,包括那些運行較舊平臺版本的的設備。

<manifest ...>
    
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>
    
<uses-sdkandroid:minSdkVersion="3"android:targetSdkVersion="5"/>
    ...
</manifest>

第三個例子,相同的應用程序,但聲明的藍牙功能需求。

結果:與第二個例子相同。

<manifest ...>
    
<uses-featureandroid:name="android.hardware.bluetooth"/>
    
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>
    
<uses-sdkandroid:minSdkVersion="3"android:targetSdkVersion="5"/>
    ...
</manifest>

最後一個例子。相同的應用程序,但<use-feature>元素中添加了android:required=”false”屬性。

結果:Google Play會針對所有設備禁止使用基於藍牙功能支持的過濾。

<manifest ...>
    
<uses-featureandroid:name="android.hardware.bluetooth"android:required="false"/>
    
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/>
    
<uses-sdkandroid:minSdkVersion="3"android:targetSdkVersion="5"/>
    ...
</manifest>

測試應用程序所需要的功能

可以使用包含在Android SDK中的aapt工具,來判斷Google Play會怎樣過濾自己的應用程序(基於應用聲明的功能和權限)。用dump badging命令來運行aapt工具,執行該項測試工作。aapt工具會解析應用程序的清單文件,並且使用與Googl Play相同的規則,來判斷應用程序所申請的功能。

以下是使用這個工具的步驟:

1. 首先,把應用程序作爲一個未簽名的.apk來編譯並導出。如果使用帶有ADTEclipse來開發應用程序,那麼右擊功能名,並選擇Android Toos->Export Unsigned Application Package。選擇目標文件名和路徑,點擊OK按鈕。

2. 接下來,定位aapt工具,如果在環境變量PATH中沒有設置它的路徑,而且使用的是SDK Tools r8或更高的版本,那麼可以在<SDK>/platform-tools/目錄中找到該工具。

注意:所使用的aapt工具版本必須是提供給最新的可用的平臺工具組件。如果沒有,可以使用Android SDK Manager來下載。

3. 使用以下語法來運行aapt

$ aapt dump badging <path_to_exported_.apk>

以下是該命令的針對上面第二個例子的輸出結果:

./aapt dump badging BTExample.apk
package: name='com.example.android.btexample' versionCode='' versionName=''

uses
-permission:'android.permission.BLUETOOTH_ADMIN'
uses
-feature:'android.hardware.bluetooth'
sdkVersion
:'3'
targetSdkVersion
:'5'
application
: label='BT Example' icon='res/drawable/app_bt_ex.png'
launchable activity name
='com.example.android.btexample.MyActivity'label='' icon=''
uses
-feature:'android.hardware.touchscreen'
main
supports
-screens:'small''normal''large'
locales
:'--_--'
densities
:'160'

Google Play和基於功能的過濾(三)---硬件功能參考

功能參考

下面列出了關於軟/硬件功能,以及能夠暗示Google Play的權限的參考信息。

硬件功能

下面列出了被大多數當前發佈的平臺所支持的硬件功能描述。對於應用程序所使用或需求的每一個硬件功能,都要在一個獨立的<uses-feature>元素的android:name屬性中聲明。

功能類型:Audio

功能描述符:Android.hardware.audio.low_latency

說明:

應用程序使用設備上的低延遲的音頻通道,並且對於輸入或的延遲或之後是敏感的。

備註:

 

功能類型:Audio

功能描述符:Android.hardware.audio.low_latency

說明:

應用程序要使用設備中的藍牙無線電功能。

備註:

 

功能類型:Camera

功能描述符:android.hardware.camera

說明:

應用程序要使用設備的攝像頭,如果設備支持多個攝像頭,那麼應用程序會使用屏幕背面的那個。

備註:

 

功能類型:Camera

功能描述符:android.hardware.camera.autofocus

說明:

攝像頭的子功能。應用程序要使用設備攝像頭的自動對焦能力。

備註:

 

功能類型:Camera

功能描述符:android.hardware.camera.flash

說明:

攝像頭的子功能。應用程序要使用設備攝像頭的閃光燈能力。

備註:

 

功能類型:Camera

功能描述符:android.hardware.camera.front

說明:

攝像頭的子功能。應用程序要使用設備上的前置攝像頭。

備註:

注意:聲明Camera類型的子功能時,就暗示着聲明瞭android.hardware.camera的父功能,除非聲明瞭android:required=”false”

 

功能類型:Location

功能描述符:android.hardware.location

說明:

應用程序會使用設備上的多種功能來判斷位置,如GPS位置、網絡位置、或蜂窩位置。

備註

 

功能類型:Location

功能描述符:android.hardware.location.network

說明:

子功能,應用程序要從設備上所支持的基於網絡的定位系統來獲取大概的位置座標。

備註:

 

功能類型:Location

功能描述符:android.hardware.location.gps

說明:

子功能,應用程序使用了從設備上的全球定位系統接收器中獲取精確的座標。

備註:

注意:聲明Location的子功能時,就暗示着聲明瞭android.hardware.location父功能,除非其聲明瞭android:require=”false”

 

功能類型:Microphone

功能描述符:android.hardware.microphone

說明:

應用程序要使用設備上的麥克風。

備註:

 

功能類型:NFC

功能描述符:android.hardware.nfc

說明:

應用程序要使用設備中的近距離無線通信功能。

備註:

 

功能類型:Sensors

功能描述符:android.hardware.sensor.accelerometer

說明:

應用程序要使用設備上的加速度傳感器的運動讀數。

備註:

 

功能類型:Sensors

功能描述符:android.hardware.sensor.barometer

說明:

應用程序要使用設備的壓力傳感器。

備註:

 

功能類型:Sensors

功能描述符:android.hardware.sensor.compass

說明:

應用程序要使用設備上的羅盤來讀取方向讀數。

備註:

 

功能類型:Sensors

功能描述符:android.hardware.sensor.gyroscope

說明:

應用程序要使用設備上的陀螺儀。

備註:

 

功能類型:Sensors

功能描述符:android.hardware.sensor.light

說明:

應用程序要使用設備的亮度傳感器。

備註:

 

功能類型:Sensors

功能描述符:android.hardware.sensor.proximity

說明:

應用程序要使用設備的近距離傳感器。

備註:

 

功能類型:Screen

功能描述符:andrid.hardware.screen.landscape

說明:

應用程序需要橫向屏幕

備註:

 

功能類型:Screen

功能描述符:android.hardware.screen.portrait

說明:

應用程序需要縱向屏幕

備註

注:例如:如果應用程序需要縱向屏幕,就應該聲明<uses-feature android:name=”android.hardware.screen.portrait>,以便只有支持縱向的設備能夠按照該應用程序。如果應用程序兩個方向都支持,那麼就不需要做任何聲明。

默認情況下,這兩個方向都被假定爲不需要,因此應用程序可以安裝在支持一個方向或兩個方向都支持的設備上。但是,如果使用android:screenOrientation屬性,設定應用程序要運行在一個特俗的設備上,那麼還用這個功能聲明給應用程序申請方向功能。例如,如果給android:screenOrientation屬性聲明瞭landscapereverseLandscape、或sensorlandscape值,那麼應用程序只對支持橫向屏幕的設備有效。最好的實踐是,依然使用<uses-feature>元素聲明一個方向的功能請求。如果使用android:screenOrientation屬性給Activity聲明瞭一個方向,但實際卻不需要該Activity,那麼就能夠通過使用包含android:require=”false”屬性聲明的<uses-feature>元素所聲明的方向來禁止該功能需求。

爲了向後兼容,任何運行只支持API Level 12或更低的平臺版本的設備,都被假定爲同時支持橫向和縱向屏幕。

 

功能類型:Telephony

功能描述符:android.hardware.telephony

說明:

應用程序要使用設備設備上的電話功能,如帶有數據通信服務的的無線電話。

備註:

 

功能類型:Telephony

功能描述符:android.hardware.telephony.cdma

說明:

子功能,應用程序要使用設備上的CDMA無線電話功能

備註:

 

功能類型:Telephony

功能描述符:android.hardware.telephony.gsm

說明:

子功能,應用程序要使用設備上的GSM無線電話功能。

備註:

注:這些子功能暗示着也聲明瞭android.hardware.telephony父功能,除非該功能需求聲明瞭android:require=”false”屬性。

 

功能類型:Touchscreen

功能描述符:android.hardware.faketouch

說明:

應用程序要使用基本的觸屏事件,如“click down”、“click up”和“drag

備註:

當應用程序聲明瞭這個功能需求時,則表明該應用程序只能跟提供了模擬觸屏(fake touch 接口)操作的設備兼容。提供fake touch接口的設備會給用戶提供一種模擬觸屏能力的輸入系統。例如,驅動屏幕光標提供fake touch接口的鼠標或遠程控制。如果應用程序需要基本的點和click交互(換句話說,只有一個方向板(d-pad),應用程序是不會工作的),就應該聲明這個功能,因爲這是觸屏交互的最低級別,這樣應用程序也會跟提供更復雜的觸屏交互的設備兼容。

注意:默認情況下,因爲應用程序需要android.hardware.touchscreen功能,所以如果想要應用程序對提供了fake touch接口的設備有效,那麼就必須通過聲明<uses-feature android:name=”android.hardware.touchscreen” android:reuired=”false”>,來明確的聲明觸屏不是必須的。

 

功能類型:Touchscreen

功能描述符:android.hardware.multitouch.distinct

說明:

應用程序要在fake touch(假觸屏)表面上執行區分兩點以上觸摸的軌跡的操作,這是fake touce功能的一個超集。

備註:

當應用程序聲明瞭這個需求時,表明該應用程序只跟支持區分兩點以上的模擬觸屏事件的設備兼容。

跟通過android.hardware.touchscreen.multitouch.distinct定義的多點觸控不同,支持在fake touch表面進行兩點以上觸控輸入的設備,它不支持所有的雙指手勢,因爲當前輸入會被轉換成平面上的光標移動。也就是說,在這樣設備上的單指手勢會移動光標,雙指碰擦會導致單指的觸屏事件;其他的雙指手勢會導致相應的雙指觸屏事件。例如:提供了移動光標的和多指觸控的軌跡板,就是一種支持在fake touch表面執行區分多點觸控的設備。

 

功能類型:Touchscreen

功能描述符:android.hardware.multitouch.jazzhand

說明:

應用程序要在fake touch(假觸屏)表面上執行區分五點以上觸摸的軌跡的操作,這是fake touce功能的一個超集。

備註:

當應用程序聲明這個功能需求時,表明該應用程序只會跟支持區分五點以上軌跡的模擬觸屏設備兼容。

跟通過android.hardware.touchscreen.multitouch.jazzhand定義的多點觸控不同,該功能定義的輸入設備表面不會支持所有的五指手勢,因爲該輸入會轉換成屏幕上的光標移動。也就是說,單指手勢會移動設備上的光標,多指觸碰手勢會導致一個單指觸碰事件;其他的多指手勢會導致相應的多指觸碰事件。例如:提供了移動光標的和多指觸控的軌跡板,就是一種支持在fake touch表面執行區分多點觸控的設備。

 

功能類型:Touchscreen

功能描述符:android.hardware.touchscreen

說明:

應用程序要使用比基本的觸屏事件還要多的手勢交互功能,如,拋物手勢。該功能是基本faketouch功能的一個超集。

備註:

默認情況下,應用程序需要這個功能。因此,默認情況下,應用程序對只提供模擬觸摸屏(fake touch)的設備是無效的。如果想要應用程序對提供模擬觸摸屏的設備有效,就必須明確的聲明觸摸屏不是必須的,聲明方式如下:<uses-feature name=”android:hardware.touchscreen” android:required=”false” />。即使應用程序不需要使用一個實際的觸摸屏。

如果應用程序需要一個觸摸屏(爲了執行一些觸碰手勢),那麼不需要做任何該功能的定義,因爲默認這個功能是必須的。但是,最好還是明確的聲明應用程序所要使用的全部功能,因此如果應用程序要使用該功能,依然還應該聲明它。

如果需要更復雜的觸摸交互,如多指手勢,就應該聲明下面的高級觸屏功能。

 

功能類型:Touchscreen

功能描述符:android.hardware.touchscreen.multitouch

說明:

應用程序要使用多點觸屏上的基本雙點觸摸功能,如掐捏手勢,但不需要獨立的軌跡跟蹤。該功能是touchscreen功能的一個超集。

備註:

聲明該功能,暗示着也聲明瞭android.hardware.touchscreen父功能,除非該功能聲明瞭android:required=”false”屬性。

 

功能類型:Touchscreen

功能描述符:android.hardware.touchscreen.multitouch.distinct

說明:

子功能,應用程序要使用多點觸屏設備的高級多點觸摸功能,如兩個以上完全獨立的點的軌跡跟蹤。它是multitouch功能的子集。

備註:

聲明該功能,暗示着也聲明瞭android.hardware.touchscreen.multitouch父功能,除非該功能聲明瞭android:required=”false”屬性。

 

功能類型:Touchscreen

功能描述符:android.hardware.touchscreen.multitouch.jazzhand

說明:

該應用程序要使用多點觸屏設備的多點觸摸功能,如五個以上完全獨立的點的軌跡跟蹤。它是multitouch功能的子集。

備註:

聲明該功能,暗示着也聲明瞭android.hardware.touchscreen.multitouch父功能,除非該功能聲明瞭android:required=”false”屬性。

 

功能類型:USB

功能描述符:android.hardware.usb.host

說明:

應用程序要使用USB主機模式功能(應用程序以主機的方式連接到USB設備上)

備註:

 

功能類型:USB

功能描述符:android.hardware.usb.accessory

說明:

應用程序要使用訪問USB的功能(應用程序以USB設備的方式連接到USB主機上)。

備註:

 

功能類型:Wifi

功能描述符:Android.hardware.wifi

說明:

應用程序要使用設備上的802.11網絡(wifi)功能。

備註:

Google Play和基於功能的過濾(四)

軟件功能參考

下表中列出了由當前大多數發佈的發佈的Android平臺所支持的軟件功能描述符。對於應用程序要使用或需要的單一功能,都要在應用程序的清單的<uses-feature>元素中使用android:name屬性來進行聲明。

功能

屬性值

說明

註釋

Live Wallpaper

android.software.live_wallpaper

應用程序使用或提供Live Wallpapers

 

SIP/VOIP

android.software.sip

應用程序要使用設備上的SIP服務

 

android.software.sip.voip

子功能。應用程序要使用設備上的基於SIP的VOIP服務。

聲明這個子功能,暗示着聲明瞭android.software.sip父功能,除非聲明該功能時也聲明瞭android:required=”false”

 

暗示功能需求的權限

在上面列出的一些功能常量中,要在相應的API發佈之後,纔對應用有效。例如,在Android2.2(API Level 8)中添加了android.hardware.bluetooth功能常量,但是它所指向的藍牙API是在Android2.0(API Level 5)中被添加的。正因爲這樣,某些應用能夠在有能力通過<uses-feature>元素聲明其所需的API功能之前,就能夠使用這些API。

要防止無意間讓某些功能對應用程序有效,Google Play會假定某些相關硬件的權限,來指定默認情況下所需要的底層硬件功能。例如,使用藍牙功能的應用程序必須在<uses-permission>元素中申請BLUETOOTH權限,對於舊版應用程序,Google Play會假定權限的聲明,意味着應用程序需要底層的android.hardware.bluetooth功能,並且會基於該功能來過濾應用程序。

下表中列出的暗示功能需求的權限,等同於那些在<uses-feature>元素中聲明的功能需求。要注意的是那些包含android:required屬性的<uses-feature>聲明,它的優先級要始終高於下表中所暗示的功能需求。

對於下表中的任何權限,都能夠用帶有android:required=”false”屬性的<uses-feature>元素來明確的禁止基於暗示功能的過濾。例如,要禁止基於CAMERA權限的任何過濾,可以在其清單文件中添加以下<uses-feature>元素的聲明:

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

分類

權限

暗示的功能需求

Bluetooth

BLUETOOTH

android.hardware.bluetooth

(See Special handling for Bluetooth feature for details.)

BLUETOOTH_ADMIN

android.hardware.bluetooth

Camera

CAMERA

android.hardware.cameraand 
android.hardware.camera.autofocus

Location

ACCESS_MOCK_LOCATION

android.hardware.location

ACCESS_LOCATION_EXTRA_COMMANDS

android.hardware.location

INSTALL_LOCATION_PROVIDER

android.hardware.location

ACCESS_COARSE_LOCATION

android.hardware.location.networkand 
android.hardware.location

ACCESS_FINE_LOCATION

android.hardware.location.gpsand 
android.hardware.location

Microphone

RECORD_AUDIO

android.hardware.microphone

Telephony

CALL_PHONE

android.hardware.telephony

CALL_PRIVILEGED

android.hardware.telephony

MODIFY_PHONE_STATE

android.hardware.telephony

PROCESS_OUTGOING_CALLS

android.hardware.telephony

READ_SMS

android.hardware.telephony

RECEIVE_SMS

android.hardware.telephony

RECEIVE_MMS

android.hardware.telephony

RECEIVE_WAP_PUSH

android.hardware.telephony

SEND_SMS

android.hardware.telephony

WRITE_APN_SETTINGS

android.hardware.telephony

WRITE_SMS

android.hardware.telephony

Wifi

ACCESS_WIFI_STATE

android.hardware.wifi

CHANGE_WIFI_STATE

android.hardware.wifi

CHANGE_WIFI_MULTICAST_STATE

android.hardware.wifi

 

 





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