Android官方文檔—APP清單(uses-feature)

<uses-feature>

語法:



    <uses-feature
      android:name="string"
      android:required=["true" | "false"]
      android:glEsVersion="integer" />

包含於:

<manifest>

說明:

聲明應用程序使用的單個硬件或軟件功能。

<uses-feature>聲明的目的是通知任何外部實體您的應用程序所依賴的硬件和軟件功能集。該元素提供了一個必需屬性,允許您指定應用程序是否需要,並且在沒有聲明的功能的情況下無法運行,或者它是否更喜歡具有該功能但可以在沒有它的情況下運行。由於功能支持可能因Android設備而異,因此<uses-feature>元素在讓應用程序描述其使用的設備變量功能方面發揮着重要作用。

應用程序聲明的可用功能集對應於Android PackageManager提供的功能常量集,這些功能常量列在本文檔底部的“功能參考”部分中。

您必須在單獨的<uses-feature>元素中指定每個要素,因此,如果您的應用程序需要多個要素,則會聲明多個<uses-feature>元素。例如,需要設備中的藍牙和相機功能的應用程序將聲明這兩個元素:

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

Google Play過濾

Google Play使用應用清單中聲明的​​<uses-feature>元素,從不符合其硬件和軟件功能要求的設備中過濾您的應用。

通過指定應用程序所需的功能,您可以啓用Google Play,僅將應用程序呈現給設備符合應用程序功能要求的用戶,而不是將其呈現給所有用戶。

有關Google Play如何使用功能作爲過濾基礎的重要信息,請參閱下面的Google Play和基於功能的過濾。

通常,您應始終確保爲應用程序所需的所有功能聲明<uses-feature>元素。

聲明的<uses-feature>元素僅供參考,這意味着Android系統本身在安裝應用程序之前不會檢查設備上的匹配功能支持。但是,其他服務(例如Google Play)或應用程序可能會檢查您的應用程序的<uses-feature>聲明,作爲處理或與您的應用程序交互的一部分。因此,聲明應用程序使用的所有功能(從下面的列表中)非常重要。

對於某些功能,可能存在一個特定屬性,允許您定義功能的版本,例如使用的Open GL版本(使用glEsVersion聲明)。使用name屬性聲明設備(例如攝像機)存在或不存在的其他功能。

雖然<uses-feature>元素僅對運行API級別4或更高級別的設備激活,但建議將所有應用程序包含這些元素,即使minSdkVersion爲“3”或更低。運行舊版本平臺的設備將忽略該元素。

注意:聲明功能時,請記住您還必須根據需要請求權限。例如,在應用程序可以訪問攝像頭API之前,您仍必須請求CAMERA權限。請求權限授予您的應用程序訪問相應硬件和軟件的權限,同時聲明應用程序使用的功能可確保正確的設備兼容性。

屬性:

android:name

指定應用程序使用的單個硬件或軟件功能,作爲描述符字符串。 “硬件功能和軟件功能”部分中列出了有效的屬性值。這些屬性值區分大小寫。

android:required

布爾值,指示應用程序是否需要android:name中指定的功能。

  • 當您爲某個功能聲明android:required =“true”時,您指定當設備上沒有指定的功能時,該應用程序無法運行或無法運行。
  • 當您爲某個功能聲明android:required =“false”時,表示該應用程序更喜歡使用該功能(如果存在於設備上),但如果需要,它可以在沒有指定功能的情況下運行。

android:默認值如果未聲明則爲“true”。

android:glEsVersion

應用程序所需的OpenGL ES版本。較高的16位表示主要編號,較低的16位表示次編號。例如,要指定OpenGL ES版本2.0,您可以將值設置爲“0x00020000”,或者要指定OpenGL ES 3.2,您可以將值設置爲“0x00030002”。

應用程序應在其清單中指定至多一個android:glEsVersion屬性。如果它指定了多個,則使用具有數值最高值的android:glEsVersion,並忽略任何其他值。

如果應用程序未指定android:glEsVersion屬性,則假定應用程序僅需要OpenGL ES 1.0,所有Android設備都支持該版本。

應用程序可以假設,如果平臺支持給定的OpenGL ES版本,它還支持所有數字較低的OpenGL ES版本。因此,需要OpenGL ES 1.0和OpenGL ES 2.0的應用程序必須指定它需要OpenGL ES 2.0。

可以與幾個OpenGL ES版本中的任何一個一起使用的應用程序應該只指定它所需的數字最低版本的OpenGL ES。 (它可以在運行時檢查是否有更高級別的OpenGL ES可用。)

有關使用OpenGL ES的更多信息,包括如何在運行時檢查支持的OpenGL ES版本,請參閱OpenGL ES API指南。

引入於:

API Level 4

參閱:

Google Play和基於功能的過濾


Google Play會過濾用戶可見的應用程序,以便用戶只能查看和下載與其設備兼容的應用程序。過濾應用程序的方法之一是功能兼容性。

要確定應用程序與給定用戶設備的功能兼容性,Google Play會比較:

  • 應用程序所需的功能 - 應用程序在其清單中的<uses-feature>元素中聲明功能與...
  • 設備上可用的功能,硬件或軟件 - 設備將其支持的功能報告爲只讀系統屬性。

爲確保準確比較功能,Android Package Manager提供了一組共享的功能常量,應用程序和設備都使用這些功能常量來聲明功能要求和支持。可用的功能常量列在本文檔底部的“功能參考”部分以及PackageManager的類文檔中。

當用戶啓動Google Play時,應用程序會通過調用getSystemAvailableFeatures()向程序包管理器查詢設備上可用功能的列表。然後,Store應用程序在爲用戶建立會話時將功能列表傳遞到Google Play。

每次將應用程序上傳到Google Play開發者控制檯時,Google Play都會掃描應用程序的清單文件。它查找<uses-feature>元素並在某些情況下與其他元素一起評估它們,例如<uses-sdk>和<uses-permission>元素。在建立應用程序的所需功能集之後,它將該列表內部存儲爲與應用程序.apk和應用程序版本關聯的元數據。

當用戶使用Google Play應用程序搜索或瀏覽應用程序時,該服務會將每個應用程序所需的功能與用戶設備上可用的功能進行比較。如果設備上存在所有應用程序所需的功能,Google Play允許用戶查看該應用程序並可能下載該應用程序。如果設備不支持任何所需功能,Google Play會過濾應用程序,以使用戶看不到該應用程序且無法下載。

由於您在<uses-feature>元素中聲明的功能直接影響Google Play過濾應用的方式,因此瞭解Google Play如何評估應用的清單並建立所需功能集非常重要。以下部分提供了更多信息。

基於顯式聲明的功能進行過濾

顯式聲明的功能是應用程序在<uses-feature>元素中聲明的功能。功能聲明可以包含android:required = [“true”| “false”]屬性(如果您正在針對API級別5或更高級別進行編譯),它允許您指定應用程序是否絕對需要該功能,並且在沒有它的情況下無法正常運行(“true”),或者應用程序是否更喜歡使用該功能如果可用,但設計爲在沒有它的情況下運行(“假”)。

Google Play以這種方式處理顯式聲明的功能:

  • 如果明確聲明某項功能是必需的,Google Play會將該功能添加到該應用程序所需功能列表中。然後,它會在不提供該功能的設備上過濾用戶的應用程序。例如:
<uses-feature android:name="android.hardware.camera" android:required="true" />
  • 如果明確聲明某項功能不是必需的,則Google Play不會將該功能添加到所需功能列表中。因此,在過濾應用程序時,從不考慮明確聲明的非必需功能。即使設備未提供聲明的功能,Google Play仍會認爲該應用程序與該設備兼容,並會將其顯示給用戶,除非適用其他過濾規則。例如:
<uses-feature android:name="android.hardware.camera" android:required="false" />

如果明確聲明瞭某個功能,但沒有安裝了android:required屬性,則Google Play會假定該功能是必需的,並對其進行過濾。

通常,如果您的應用程序設計爲在Android 1.6及更早版本上運行,則API中不提供android:required屬性,Google Play假定需要任何和所有<uses-feature>聲明。

注意:通過明確聲明功能幷包含android:required =“false”屬性,您可以有效禁用Google Play上針對指定功能的所有過濾。

基於隱式功能進行過濾

隱式功能是應用程序爲了正常運行而需要的功能,但未在清單文件的<uses-feature>元素中聲明。嚴格地說,每個應用程序應該始終聲明它使用或要求的所有功能,因此應用程序使用的功能的聲明的缺失應被視爲錯誤。但是,作爲用戶和開發人員的安全措施,Google Play會在每個應用程序中查找隱式功能,併爲這些功能設置過濾器,就像對顯式聲明的功能所做的那樣。

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

  • 該應用程序是針對較舊版本的Android庫(Android 1.5或更早版本)編譯的,並且<uses-feature>元素不可用。
  • 開發人員錯誤地認爲該功能將出現在所有設備上,並且聲明是不必要的。
  • 開發人員意外省略了功能聲明。
  • 開發人員明確聲明瞭該功能,但聲明無效。例如,<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”屬性。例如,要禁用從CAMERA權限派生的過濾,您將聲明該功能,如下所示。

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

重要的是要了解您在<uses-permission>元素中請求的權限可以直接影響Google Play過濾您的應用程序的方式。參考部分權限暗示要素要求列出了暗示要素要求並因此觸發過濾的完整權限集。

藍牙功能的特殊處理

在確定藍牙過濾時,Google Play應用的規則與上述規則略有不同。

如果應用程序在<uses-permission>元素中聲明瞭藍牙權限,但未在<uses-feature>元素中明確聲明藍牙功能,則Google Play會檢查應用程序所在的Android平臺的版本。旨在運行,如<uses-sdk>元素中指定的那樣。

如下表所示,僅當應用程序將其最低或目標平臺聲明爲Android 2.0(API級別5)或更高版本時,Google Play纔會啓用對藍牙功能的過濾。但請注意,當應用程序在<uses-feature>元素中明確聲明藍牙功能時,Google Play會應用常規規則進行過濾。

表1. Google Play如何確定請求藍牙權限但未在<uses-feature>元素中聲明藍牙功能的應用程序的藍牙功能要求。

如果minSdkVersion是... 或者targetSdkVersion是 Result
<= 4(或未使用-sdk) <=4 Google Play不會根據他們報告的對android.hardware.bluetooth功能的支持從任何設備中過濾應用程序。
<=4 >=5 Google Play會從任何不支持android.hardware.bluetooth功能的設備(包括舊版本)中過濾應用程序。
>=5 >=5

以下示例根據Google Play處理藍牙功能的方式說明了不同的過濾效果。

在第一個示例中,設計爲在較舊的API級別上運行的應用程序聲明瞭藍牙權限,但未在<uses-feature>元素中聲明藍牙功能。
    結果:Google Play不會從任何設備過濾應用程序。

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

在下面的第二個示例中,相同的應用程序還聲明目標API級別爲“5”。
    結果:Google Play現在假定該功能是必需的,並將從所有未報告藍牙支持的設備(包括運行舊版平臺的設備)中過濾應用程序。

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

現在,相同的應用程序專門聲明瞭藍牙功能。

    結果:與前一個示例相同(應用過濾)。

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

最後,在下面的例子中,同一個應用程序添加了一個android:required =“false”屬性。
    結果:Google Play會針對所有設備禁用基於藍牙功能支持的過濾功能。

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

測試應用程序所需的功能

您可以使用Android SDK中包含的aapt工具來確定Google Play如何根據其聲明的功能和權限過濾您的應用。爲此,請使用dump badging命令運行aapt。這會導致aapt解析您的應用程序的清單,並應用與Google Play使用的相同規則來確定您的應用程序所需的功能。

要使用該工具,請按照下列步驟操作:

1.首先,將您的應用程序構建並導出爲未簽名的.apk。如果您在Android Studio中進行開發,請使用Gradle構建應用程序:

a.打開項目,然後選擇“運行”>“編輯配置”。

b.選擇“運行/調試配置”窗口左上角附近的加號。

c.選擇Gradle。

d.在名稱中輸入未簽名的APK。

e.從Gradle項目部分選擇您的模塊。

f.在任務中輸入彙編。

g.選擇“確定”以完成新配置。

h.確保在工具欄中選擇了未簽名的APK運行配置,然後選擇運行>運行'未簽名的APK'。

2.接下來,找到aapt工具(如果它尚未在您的PATH中)。如果您使用的是SDK Tools r8或更高版本,則可以在<SDK> / platform-tools /目錄中找到aapt。

注意:您必須使用爲最新的Platform-Tools組件提供的aapt版本。如果您沒有最新的Platform-Tools組件,請使用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'

功能參考


以下部分提供有關硬件功能,軟件功能和暗示特定功能要求的權限集的參考信息。

硬件功能

本節介紹最新平臺版本支持的硬件功能。要指示您的應用程序使用或需要硬件功能,請在android:name屬性中聲明相應的值(以“android.hardware”開頭)。每次聲明硬件功能時,請使用單獨的<uses-feature>元素。

音頻硬件功能

android.hardware.audio.low_latency

該應用程序使用該設備的低延遲音頻管道,可減少處理聲音輸入或輸出時的延遲和延遲。

android.hardware.audio.output

該應用程序使用設備的揚聲器,音頻插孔,藍牙流功能或類似機制傳輸聲音。

android.hardware.audio.pro

該應用程序使用該設備的高端音頻功能和性能。

android.hardware.microphone

該應用程序使用設備的麥克風錄製音頻。

藍牙硬件功能

android.hardware.bluetooth

該應用程序使用設備的藍牙功能,通常用於與其他藍牙設備通信。

android.hardware.bluetooth_le

該應用程序使用該設備的藍牙低功耗無線電功能。

相機硬件功能

android.hardware.camera

該應用程序使用該設備的後置攝像頭。只有前置攝像頭的設備不會列出此功能,因此如果您的應用可以與任何攝像頭通信,請使用android.hardware.camera.any功能,無論攝像頭朝哪個方向。

android.hardware.camera.any

該應用程序使用設備的一個攝像頭,或用戶連接到設備的外部攝像頭。如果您的應用不需要相機作爲背面相機,請使用此值而不是android.hardware.camera。

android.hardware.camera.autofocus

該應用程序使用設備相機支持的自動對焦功能。

通過使用此功能,應用程序暗示它還使用android.hardware.camera功能,除非使用android:required =“false”聲明此父功能。

android.hardware.camera.capability.manual_post_processing

該應用程序使用設備相機支持的MANUAL_POST_PROCESSING功能。

此功能允許您的應用覆蓋相機的自動白平衡功能。使用android.colorCorrection.transform,android.colorCorrection.gains和TRANSFORM_MATRIX的android.colorCorrection.mode。

android.hardware.camera.capability.manual_sensor

該應用程序使用設備相機支持的MANUAL_SENSOR功能。

此功能意味着支持自動曝光鎖定(android.control.aeLock),它允許相機的曝光時間和靈敏度保持固定在特定值

android.hardware.camera.capability.raw

該應用程序使用設備相機支持的RAW功能。

此功能意味着設備可以保存DNG(原始)文件,並且設備的攝像頭提供應用程序直接處理這些原始圖像所需的DNG相關元數據。

android.hardware.camera.external

該應用程序與用戶連接到設備的外部攝像頭通信。但是,此功能不保證外部相機可供您的應用使用。

android.hardware.camera.flash

該應用程序使用設備相機支持的閃光燈功能。

通過使用此功能,應用程序暗示它還使用android.hardware.camera功能,除非使用android:required =“false”聲明此父功能。

android.hardware.camera.front

該應用程序使用該設備的前置攝像頭。

通過使用此功能,應用程序暗示它還使用android.hardware.camera功能,除非使用android:required =“false”聲明此父功能。

android.hardware.camera.level.full

該應用程序使用至少一個設備的攝像頭提供的全級圖像捕獲支持。具有全面支持的攝像機提供突發捕獲功能,每幀控制和手動後處理控制。

設備UI硬件功能

android.hardware.type.automotive

該應用程序旨在在車輛內的一組屏幕上顯示其UI。用戶使用硬按鈕,觸摸,旋轉控制器和類似鼠標的界面與應用程序交互。車輛的屏幕通常出現在車輛的中控臺或儀表組中。這些屏幕通常具有有限的尺寸和分辨率。

注意:請務必記住,由於用戶在使用此類應用UI時正在駕駛,因此應用必須最大限度地減少駕駛員分心。

android.hardware.type.television

(已棄用;請改用android.software.leanback。)

該應用程序旨在在電視上顯示其UI。此功能將“電視”定義爲典型的客廳電視體驗:顯示在大屏幕上,用戶坐在遠處,主要輸入形式類似於d-pad,通常不使用鼠標,指針或觸摸設備。

android.hardware.type.watch

該應用程序旨在在手錶上顯示其UI。手錶佩戴在手指上,例如手腕上。用戶在與設備交互時非常靠近設備。

指紋硬件功能

android.hardware.fingerprint

該應用程序使用設備的生物識別硬件讀取指紋。

遊戲手柄硬件功能

android.hardware.gamepad

該應用程序從設備本身或從連接的遊戲手柄捕獲遊戲控制器輸入。

紅外線硬件功能

android.hardware.consumerir

該應用程序使用設備的紅外(IR)功能,通常與其他消費者IR設備通信。

位置硬件功能

android.hardware.location

該應用程序使用設備上的一個或多個功能來確定位置,例如GPS位置,網絡位置或小區位置。

android.hardware.location.gps

該應用程序使用從設備上的全球定位系統(GPS)接收器獲得的精確位置座標。

通過使用此功能,應用程序暗示它還使用android.hardware.location功能,除非使用屬性android:required =“false”聲明此父功能。

android.hardware.location.network

該應用程序使用從設備支持的基於網絡的地理定位系統獲得的粗略位置座標。

通過使用此功能,應用程序暗示它還使用android.hardware.location功能,除非使用屬性android:required =“false”聲明此父功能。

NFC硬件功能

android.hardware.nfc

該應用程序使用該設備的近場通信(NFC)無線電功能。

android.hardware.nfc.hce

(不推薦使用。)

該應用程序使用設備上託管的NFC卡模擬。

OpenGL ES硬件功能

android.hardware.opengles.aep

該應用程序使用設備上安裝的OpenGL ES Android擴展包。

傳感器硬件功能

android.hardware.sensor.accelerometer

該應用程序使用設備加速度計的運動讀數來檢測設備的當前方向。例如,應用程序可以使用加速度計讀數來確定何時在縱向和橫向方向之間切換。

android.hardware.sensor.ambient_temperature

該應用程序使用該設備的環境(環境)溫度傳感器。例如,天氣應用程序可以報告室內或室外溫度。

android.hardware.sensor.barometer

該應用程序使用該設備的晴雨表。例如,天氣應用程序可以報告氣壓。

android.hardware.sensor.compass

該應用程序使用該設備的磁力計(指南針)。例如,導航應用可以顯示用戶面向的當前方向。

android.hardware.sensor.gyroscope

該應用程序使用設備的陀螺儀檢測旋轉和扭曲,創建一個六軸定位系統。通過使用此傳感器,應用程序可以更平穩地檢測是否需要在縱向和橫向之間切換。

android.hardware.sensor.hifi_sensors

該應用程序使用該設備的高保真(Hi-Fi)傳感器。例如,遊戲應用程序可以檢測用戶的高精度移動。

android.hardware.sensor.heartrate

該應用程序使用該設備的心率監測器。例如,健身應用可以報告用戶心率隨時間的變化趨勢。

android.hardware.sensor.heartrate.ecg

該應用程序使用該設備的心電圖(ECG)心率傳感器。例如,健身應用程序可以報告有關用戶心率的更詳細信息。

android.hardware.sensor.light

該應用程序使用該設備的光傳感器。例如,app可以基於環境照明條件顯示兩種不同顏色方案中的一種。

android.hardware.sensor.proximity

該應用程序使用該設備的接近傳感器。例如,當應用檢測到用戶將設備靠近他們的身體時,電話應用可以關閉設備的屏幕。

android.hardware.sensor.relative_humidity

該應用程序使用該設備的相對溼度傳感器。例如,天氣應用程序可以使用溼度來計算和報告當前的露點。

android.hardware.sensor.stepcounter

該應用程序使用設備的步數計數器。例如,健身應用程序可以報告用戶爲實現其每日步數目標而需要採取的步驟數。

android.hardware.sensor.stepdetector

該應用程序使用設備的步進檢測器。例如,健身應用程序可以使用步驟之間的時間間隔來推斷用戶正在進行的鍛鍊類型。

屏幕硬件功能

android.hardware.screen.landscape

android.hardware.screen.portrait

該應用要求設備使用縱向或橫向。如果您的應用支持兩種方向,則無需聲明任何一項功能。

例如,如果您的應用需要縱向,則應聲明以下功能,以便只有支持縱向(始終或由用戶選擇)的設備才能運行您的應用:

<uses-feature android:name="android.hardware.screen.portrait" />

默認情況下,假設兩個方向都不是必需的,因此您的應用程序可能安裝在支持一個或兩個方向的設備上。但是,如果您的任何活動要求它們以特定方向運行,請使用android:screenOrientation屬性,則此聲明暗示您的應用需要該方向。例如,如果您使用“landscape”,“reverseLandscape”或“sensorLandscape”聲明android:screenOrientation,那麼您的應用程序將僅在支持橫向的設備上可用。

作爲最佳實踐,您仍應使用<uses-feature>元素聲明對此方向的要求。如果使用android:screenOrientation聲明活動的方向,但實際上並不需要它,則可以通過使用<uses-feature>元素聲明方向幷包含android:required =“false”來禁用該要求。

爲了向後兼容,運行Android 3.1(API級別12)或更低版本的任何設備都支持橫向和縱向方向。

電話硬件功能

android.hardware.telephony

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

android.hardware.telephony.cdma

該應用程序使用碼分多址(CDMA)電話無線電系統。

通過使用此功能,應用程序暗示它還使用android.hardware.telephony功能,除非使用android:required =“false”聲明此父功能。

android.hardware.telephony.gsm

該應用程序使用全球移動通信系統(GSM)電話無線電系統。

通過使用此功能,應用程序暗示它還使用android.hardware.telephony功能,除非使用android:required =“false”聲明此父功能。

觸摸屏硬件功能

android.hardware.faketouch

該應用程序使用基本的觸摸交互事件,例如點擊和拖動。

根據需要聲明時,此功能表示僅當該設備模擬觸摸屏(“假觸摸”界面)或具有實際觸摸屏時,該應用才與設備兼容。

提供虛假觸摸界面的設備提供了模擬觸摸屏功能子集的用戶輸入系統。例如,鼠標或遙控器可以驅動屏幕上的光標。如果您的應用需要基本的點擊交互(換句話說,它只適用於d-pad控制器),您應該聲明此功能。因爲這是觸摸交互的最低級別,您還可以使用在提供更復雜觸摸界面的設備上聲明此功能的應用程序。

注意:默認情況下,應用需要android.hardware.touchscreen功能。如果您希望應用程序可用於提供虛假觸摸界面的設備,則還必須明確聲明不需要觸摸屏,如下所示:

android.hardware.faketouch.multitouch.distinct

該應用程序在假觸摸界面上跟蹤兩個或多個不同的“手指”。這是android.hardware.faketouch功能的超集。當根據需要聲明時,此功能表示僅當該設備模擬兩個或更多手指的不同跟蹤或具有實際觸摸屏時,該應用才與設備兼容。

與android.hardware.touchscreen.multitouch.distinct定義的獨特多點觸控不同,支持具有假觸摸界面的獨特多點觸控的輸入設備不支持所有雙指手勢,因爲輸入轉換爲屏幕上的光標移動。也就是說,在這樣的設備上的單指手勢移動光標,雙指滑動導致單指觸摸事件發生,並且其他雙指手勢觸發相應的雙指觸摸事件。

爲光標移動提供雙指觸摸觸控板的設備可以支持此功能。

android.hardware.faketouch.multitouch.jazzhand

該應用程序在假觸摸界面上跟蹤五個或更多不同的“手指”。這是android.hardware.faketouch功能的超集。根據需要聲明時,此功能表示僅當該設備模擬五個或更多手指的不同跟蹤或具有實際觸摸屏時,該應用才與設備兼容。

與android.hardware.touchscreen.multitouch.jazzhand定義的獨特多點觸控不同,支持帶有假觸摸界面的爵士手多點觸控的輸入設備不支持所有五指手勢,因爲輸入轉換爲屏幕上的光標移動。也就是說,這種設備上的單指手勢移動光標,多指手勢導致單指觸摸事件發生,並且其他多指手勢觸發相應的多指觸摸事件。

爲光標移動提供五指觸摸觸控板的設備可以支持此功能。

android.hardware.touchscreen

該應用程序使用設備的觸摸屏功能進行比基本觸摸事件更具交互性的手勢,例如投擲。這是android.hardware.faketouch功能的超集。

默認情況下,您的應用需要此功能。因此,默認情況下,僅提供模擬觸摸界面(“假觸摸”)的設備無法使用您的應用。如果您想在提供虛假觸摸界面的設備上(或者甚至在僅提供d-pad控制器的設備上)使您的應用程序可用,您必須通過聲明android.hardware.touchscreen與android明確聲明不需要觸摸屏:需要= “假”。如果您的應用使用 - 但不需要 - 真正的觸摸屏界面,您應該添加此聲明。

如果您的應用程序實際上需要觸摸界面(以執行更高級的觸摸手勢,例如fling),那麼您不需要聲明任何觸摸界面功能,因爲默認情況下它們是必需的。但是,如果您明確聲明應用使用的所有功能,則最好。

如果您需要更復雜的觸摸交互,例如多指手勢,則應聲明您的應用使用高級觸摸屏功能。

android.hardware.touchscreen.multitouch

該應用程序使用設備的基本兩點多點觸控功能,例如捏合手勢,但應用程序不需要獨立跟蹤觸摸。這是android.hardware.touchscreen功能的超集。

通過使用此功能,應用程序暗示它還使用android.hardware.touchscreen功能,除非使用android:required =“false”聲明此父功能。

android.hardware.touchscreen.multitouch.distinct

該應用程序使用該設備的高級多點觸控功能,可以獨立跟蹤兩個或多個點。此功能是android.hardware.touchscreen.multitouch功能的超集。

通過使用此功能,應用程序暗示它還使用android.hardware.touchscreen.multitouch功能,除非使用android:required =“false”聲明此父功能。

android.hardware.touchscreen.multitouch.jazzhand

該應用程序使用該設備的高級多點觸控功能獨立跟蹤五個或更多點。此功能是android.hardware.touchscreen.multitouch功能的超集。

通過使用此功能,應用程序暗示它還使用android.hardware.touchscreen.multitouch功能,除非使用android:required =“false”聲明此父功能。

USB硬件功能

android.hardware.usb.accessory

該應用程序充當USB設備並連接到USB主機。

android.hardware.usb.host

該應用程序使用連接到設備的USB配件。該設備用作USB主機。

Wi-Fi硬件功能

android.hardware.wifi

該應用程序使用設備上的802.11網絡(Wi-Fi)功能。

android.hardware.wifi.direct

該應用程序使用設備上的Wi-Fi Direct網絡功能。

軟件功能

本節介紹最新平臺版本支持的軟件功能。要指示您的應用程序使用或需要軟件功能,請在android:name屬性中聲明相應的值(以“android.software”開頭)。每次聲明軟件功能時,請使用單獨的<uses-feature>元素。

通訊軟件功能

android.software.sip

該應用程序使用會話啓動協議(SIP)服務。通過使用SIP,該應用程序可以支持互聯網電話操作,例如視頻會議和即時消息。

android.software.sip.voip

該應用程序使用基於SIP的互聯網語音協議(VoIP)服務。通過使用VoIP,該應用程序可以支持實時互聯網電話操作,例如雙向視頻會議。

通過使用此功能,應用程序暗示它還使用android.software.sip功能,除非使用android:required =“false”聲明此父功能。

android.software.webview

該應用程序顯示來自互聯網的內容。

自定義輸入軟件功能

android.software.input_methods

該應用程序使用新的輸入方法,開發人員在InputMethodService中定義該方法。

設備管理軟件功能

android.software.backup

該應用程序包含處理備份和還原操作的邏輯。

android.software.device_admin

該應用程序使用設備管理員來實施設備策略。

android.software.managed_users

該應用程序支持輔助用戶和託管配置文件

android.software.securely_removes_users

該應用可以永久刪除用戶及其相關數據。

android.software.verified_boot

該應用程序包含處理來自設備驗證啓動功能的結果的邏輯,該功能可檢測設備的配置在重啓操作期間是否發生更改。

媒體軟件功能

android.software.midi

該應用程序使用樂器數字接口(MIDI)協議連接到樂器或輸出聲音。

android.software.print

該應用程序包括用於打印設備上顯示的文檔的命令。

android.software.leanback

該應用程序提供了一個用於在大屏幕(如電視)上觀看的UI。

android.software.live_tv

該應用程序流式傳輸電視節目。

屏幕界面軟件功能

android.software.app_widgets

該應用程序使用或提供App Widgets,並且只應安裝在包含主屏幕或用戶可以嵌入App Widgets的類似位置的設備上。

android.software.home_screen

該應用程序可以替代設備的主屏幕。

android.software.live_wallpaper

該應用程序使用或提供包含動畫的壁紙。

隱含功能要求的權限

在相應的API之後,一些硬件和軟件特徵常量可供應用程序使用;例如,android.hardware.bluetooth功能是在Android 2.2(API級別8)中添加的,但它引用的藍牙API是在Android 2.0(API級別5)中添加的。因此,一些應用程序能夠使用API​​,然後才能使用<uses-feature>系統聲明它們需要API。

爲防止這些應用無意中提供,Google Play會假定某些與硬件相關的權限表明默認情況下需要基礎硬件功能。例如,使用藍牙的應用程序必須在<uses-permission>元素中請求BLUETOOTH權限 - 對於舊版應用程序,Google Play假定權限聲明表示應用程序需要基礎android.hardware.bluetooth功能並設置基於該功能進行過濾。表2列出了暗示與<uses-feature>元素中聲明的功能要求等效的功能要求的權限。

請注意,<uses-feature>聲明(包括任何聲明的android:required屬性)始終優先於表2中權限所隱含的功能。對於任何這些權限,您可以通過明確聲明隱含功能來禁用基於隱含功能的過濾在<uses-feature>元素中顯式地​​使用android:required =“false”屬性。例如,要禁用基於CAMERA權限的任何過濾,您可以將此<uses-feature>聲明添加到清單文件中:

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

表2.暗示設備硬件使用的設備權限。

 

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