<uses-feature>

Google Play używa elementów <uses-feature> zadeklarowanych w manifeście, aby odfiltrować aplikację z urządzeń, które nie spełniają wymagań dotyczących funkcji sprzętu i oprogramowania.

Wskazując funkcje wymagane przez aplikację, umożliwiasz Google Play udostępnianie jej tylko tym użytkownikom, których urządzenia spełniają jej wymagania.

Ważne informacje o tym, jak Google Play wykorzystuje funkcje jako podstawę filtrowania, znajdziesz w sekcji Google Play i filtrowanie według funkcji.

składnia:
<uses-feature
  android:name="string"
  android:required=["true" | "false"]
  android:glEsVersion="integer" />
zawarte w:
<manifest>
description:

Deklaruje jedną funkcję sprzętu lub oprogramowania, z której korzysta aplikacja.

Deklaracja <uses-feature> ma na celu informowanie dowolnego podmiotu zewnętrznego o zestawie funkcji sprzętu i oprogramowania, od których zależy Twoja aplikacja. Element udostępnia atrybut required, który pozwala określić, czy aplikacja wymaga zadeklarowanej funkcji i czy bez niej nie będzie działać, lub może preferować tę funkcję, ale może bez niej działać.

Obsługa funkcji może się różnić w zależności od urządzenia z Androidem, więc element <uses-feature> odgrywa ważną rolę, umożliwiając aplikacji opisanie używanych przez nią funkcji zmiennych w obrębie urządzenia.

Zestaw dostępnych funkcji deklarowanych w aplikacji odpowiada zbiorowi stałych funkcji udostępnianych przez PackageManager Androida. Stałe cech znajdziesz w sekcji Informacje o funkcjach w tym dokumencie.

Każdą cechę musisz określić w osobnym elemencie <uses-feature>, więc jeśli aplikacja wymaga wielu funkcji, deklaruje wiele elementów <uses-feature>. Na przykład aplikacja, która wymaga na urządzeniu Bluetootha i funkcji aparatu, deklaruje te 2 elementy:

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

Ogólnie w przypadku wszystkich funkcji, których potrzebuje Twoja aplikacja, zawsze deklaruj elementy <uses-feature>.

Zadeklarowane elementy <uses-feature> mają charakter wyłącznie informacyjny, co oznacza, że Android sam przed zainstalowaniem aplikacji nie sprawdza obsługi pasujących funkcji na urządzeniu.

Jednak inne usługi, np. Google Play, i aplikacje, mogą sprawdzać deklaracje <uses-feature> w ramach obsługi aplikacji lub interakcji z nią. Z tego powodu bardzo ważne jest zadeklarowanie wszystkich funkcji, z których korzysta Twoja aplikacja.

W przypadku niektórych funkcji może istnieć konkretny atrybut, który umożliwia określenie wersji funkcji, np. używana wersja Open GL (zadeklarowana jako glEsVersion). Inne funkcje, które występują lub nie istnieją dla danego urządzenia, takie jak kamera, są deklarowane za pomocą atrybutu name.

Chociaż element <uses-feature> jest aktywowany tylko na urządzeniach z interfejsem API poziomu 4 lub wyższym, uwzględniaj je w przypadku wszystkich aplikacji, nawet jeśli minSdkVersion ma wartość 3 lub niższą. Urządzenia ze starszymi wersjami platformy ignorują ten element.

Uwaga: podczas deklarowania funkcji pamiętaj, że musisz też odpowiednio poprosić o uprawnienia. Na przykład musisz poprosić o uprawnienie CAMERA, aby aplikacja mogła uzyskać dostęp do interfejsu API aparatu. Żądanie tych uprawnień daje aplikacji dostęp do odpowiedniego sprzętu i oprogramowania. Zadeklarowanie funkcji używanych przez aplikację pomaga zapewnić zgodność urządzenia.

atrybuty:
android:name
Określa pojedynczą funkcję sprzętu lub oprogramowania używaną przez aplikację jako ciąg deskryptora. Prawidłowe wartości atrybutów są wymienione w sekcjach Funkcje sprzętowe i Funkcje oprogramowania. W wartościach atrybutów wielkość liter ma znaczenie.
android:required
Wartość logiczna wskazująca, czy aplikacja wymaga funkcji określonej we właściwości android:name.
  • Zadeklarowanie android:required="true" dla funkcji oznacza, że aplikacja nie może działać lub nie została zaprojektowana, gdy określonej funkcji nie ma na urządzeniu.
  • Zadeklarowanie android:required="false" dla funkcji oznacza, że aplikacja korzysta z tej funkcji (jeśli jest dostępna) na urządzeniu, ale w razie potrzeby działa bez określonej funkcji.

Wartością domyślną android:required jest "true".

android:glEsVersion
Wersja OpenGL ES wymagana przez aplikację. Im wyższe 16 bitów, to liczba większa, a mniejsze 16 bitów – liczbę mniejszą. Na przykład aby podać wersję OpenGL ES 2.0, ustaw wartość „0x00020000” lub „0x00030002”.

Aplikacja określa w swoim pliku manifestu maksymalnie 1 atrybut android:glEsVersion. Jeśli zasada określa więcej niż 1, używana jest wartość android:glEsVersion o najwyższej wartości liczbowej, a wszelkie inne wartości są ignorowane.

Jeśli aplikacja nie ma atrybutu android:glEsVersion, przyjmuje się, że wymaga tylko środowiska OpenGL ES 1.0, które jest obsługiwane przez wszystkie urządzenia z Androidem.

Aplikacja może zakładać, że jeśli platforma obsługuje daną wersję OpenGL ES, obsługuje też wszystkie numerycznie niższe wersje OpenGL ES. Dlatego w przypadku aplikacji, która wymaga zarówno OpenGL ES 1.0, jak i Open OpenGL ES 2.0, określ, że wymaga ona OpenGL ES 2.0.

W przypadku aplikacji, która może działać z dowolną z kilku wersji OpenGL ES, podaj tylko najniższą liczbę wymaganych wersji OpenGL ES. Może sprawdzić w czasie działania, czy dostępny jest wyższy poziom OpenGL ES.

Więcej informacji o korzystaniu z interfejsu OpenGL ES, w tym o sprawdzaniu obsługiwanej wersji OpenGL ES w czasie działania, znajdziesz w przewodniku po interfejsie API OpenGL ES.

wprowadzone w:
Poziom API 4
zobacz też:

Google Play i filtrowanie oparte na funkcjach

Google Play filtruje aplikacje, które są widoczne dla użytkowników, tak aby użytkownicy mogli zobaczyć i pobrać tylko te aplikacje, które są zgodne z ich urządzeniami. Jednym ze sposobów filtrowania aplikacji jest zgodność funkcji.

Aby określić zgodność aplikacji z funkcjami aplikacji na danym urządzeniu użytkownika, Google Play porównuje:

  • Funkcje wymagane przez aplikację zgodnie z opisem w elementach <uses-feature> w pliku manifestu.
  • Funkcje dostępne na urządzeniu w sprzęcie lub oprogramowaniu, zgodnie z raportami korzystającymi z właściwości systemowych tylko do odczytu.

Aby dokładnie porównać funkcje, Menedżer pakietów na Androida udostępnia wspólny zestaw stałych funkcji, których używają aplikacje i urządzenia do deklarowania wymagań funkcji i ich obsługi. Dostępne stałe wartości funkcji znajdziesz w sekcji Opis funkcji w tym dokumencie oraz w dokumentacji klas PackageManager.

Gdy użytkownik uruchomi Google Play, aplikacja wyśle do menedżera pakietów zapytanie o listę funkcji dostępnych na urządzeniu, wywołując getSystemAvailableFeatures(). Następnie aplikacja Sklep przekazuje listę funkcji do Google Play podczas nawiązywania sesji użytkownika.

Za każdym razem, gdy przesyłasz aplikację do Konsoli Google Play, Google Play skanuje jej plik manifestu. Wyszukuje elementy <uses-feature> i ocenia je w połączeniu z innymi elementami, w niektórych przypadkach, takimi jak elementy <uses-sdk> i <uses-permission>. Po ustaleniu zestawu wymaganych funkcji aplikacja zapisuje te listy wewnętrznie jako metadane powiązane z pakietem APK i wersją aplikacji.

Gdy użytkownik wyszukuje lub przegląda aplikacje w aplikacji Google Play, usługa ta porównuje funkcje każdej z nich z funkcjami dostępnymi na urządzeniu użytkownika. Jeśli na urządzeniu znajdują się wszystkie wymagane funkcje, Google Play umożliwia użytkownikowi jej wyświetlenie i ewentualnie jej pobranie.

Jeśli urządzenie nie obsługuje którejś wymaganej funkcji, Google Play filtruje aplikację, tak aby była niewidoczna dla użytkownika lub dostępna do pobrania.

Funkcje zadeklarowane w elementach <uses-feature> bezpośrednio wpływają na sposób filtrowania aplikacji przez Google Play, dlatego warto wiedzieć, jak Google Play ocenia plik manifestu i określa zestaw wymaganych funkcji. Sekcje poniżej zawierają więcej informacji.

Filtrowanie na podstawie jawnie zadeklarowanych funkcji

Jasno zadeklarowana funkcja to funkcja deklarowana przez aplikację w elemencie <uses-feature>. Deklaracja funkcji może zawierać atrybut android:required=["true" | "false"], jeśli kompilujesz do interfejsu API na poziomie 5 lub wyższym.

W ten sposób możesz określić, czy aplikacja wymaga danej funkcji i nie może działać prawidłowo bez niej ("true") czy korzysta z funkcji, jeśli jest dostępna, ale zostanie zaprojektowana tak, aby działać bez niej ("false").

Google Play obsługuje wyraźnie zadeklarowane funkcje w ten sposób:

  • Jeśli funkcja jest wyraźnie zadeklarowana jako wymagana, tak jak w przykładzie poniżej, Google Play dodaje ją do listy funkcji wymaganych aplikacji. Następnie odfiltrowuje aplikację z urządzeń, które nie mają tej funkcji.
    <uses-feature android:name="android.hardware.camera.any" android:required="true" />
    
  • Jeśli jawnie zadeklarujesz, że funkcja nie jest wymagana, tak jak w przykładzie poniżej, Google Play nie jej doda do listy wymaganych funkcji. Z tego powodu jawnie zadeklarowana, niewymagana funkcja nie jest brana pod uwagę podczas filtrowania aplikacji. Nawet jeśli urządzenie nie obsługuje zadeklarowanej funkcji, Google Play nadal uznaje aplikację za zgodną z urządzeniem i wyświetla ją użytkownikowi, chyba że mają do niej zastosowanie inne reguły filtrowania.
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    
  • Jeśli funkcja jest jawnie zadeklarowana, ale bez atrybutu android:required, Google Play zakłada, że jest ona wymagana, i konfiguruje dla niej filtrowanie.

Jeśli Twoja aplikacja jest przeznaczona do działania na Androidzie 1.6 lub starszym, atrybut android:required nie jest dostępny w interfejsie API, a Google Play zakłada, że wymagane są wszystkie deklaracje <uses-feature>.

Uwaga: jawnie zadeklarując funkcję i dodasz atrybut android:required="false", możesz całkowicie wyłączyć jej filtrowanie w Google Play.

Filtruj na podstawie funkcji niejawnych

Funkcja niejawna to funkcja, której aplikacja wymaga do prawidłowego działania, ale nie jest zadeklarowana w elemencie <uses-feature> w pliku manifestu. Dokładniej mówiąc, w przypadku każdej aplikacji najlepiej jest zawsze deklarować wszystkie funkcje, których używa lub wymaga. Brak deklaracji funkcji używanej przez aplikację może zostać uznany za błąd.

Jednak w trosce o bezpieczeństwo użytkowników i deweloperów Google Play szuka niejawnych funkcji w każdej aplikacji i ustawia dla nich filtry, podobnie jak w przypadku funkcji jawnie zadeklarowanych.

Aplikacja może wymagać funkcji, ale nie może jej zadeklarować z tych powodów:

  • Aplikacja została skompilowana ze starszą wersją biblioteki Androida (Android 1.5 lub starszym), dla której element <uses-feature> jest niedostępny.
  • Deweloper nieprawidłowo zakłada, że funkcja jest dostępna na wszystkich urządzeniach, więc deklaracja jest niepotrzebna.
  • Deweloper przypadkowo pomija deklarację funkcji.
  • Deweloper wyraźnie deklaruje tę funkcję, ale deklaracja jest nieprawidłowa. Na przykład deklaracja funkcji jest nieprawidłowa z powodu błędu pisowni w nazwie elementu <uses-feature> lub nierozpoznanej wartości ciągu znaków dla atrybutu android:name.

W tym celu Google Play próbuje wykryć domniemane wymagania aplikacji w zakresie funkcji, analizując inne elementy zadeklarowane w pliku manifestu, czyli elementy <uses-permission>.

Jeśli aplikacja prosi o uprawnienia związane ze sprzętem, Google Play zakłada, że używa podstawowych funkcji sprzętowych, więc te funkcje są wymagane, nawet jeśli nie ma odpowiadających im deklaracji <uses-feature>. W przypadku takich uprawnień Google Play dodaje podstawowe funkcje sprzętowe do metadanych aplikacji, które przechowuje, i konfiguruje dla nich filtry.

Jeśli na przykład aplikacja prosi o uprawnienie CAMERA, Google Play zakłada, że wymaga tylnego aparatu (skierowanego do świata), nawet jeśli nie ma zadeklarowanego elementu <uses-feature> dla właściwości android.hardware.camera. W efekcie Google Play filtruje urządzenia, które nie mają tylnego aparatu.

Jeśli nie chcesz, aby Google Play filtrować wyniki na podstawie konkretnej domniemanej funkcji, wyraźnie zadeklaruj tę funkcję w elemencie <uses-feature> i dodaj atrybut android:required="false". Aby na przykład wyłączyć filtrowanie sugerowane przez uprawnienie CAMERA, zadeklaruj te funkcje:

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

Uwaga: uprawnienia, których potrzebujesz w elementach <uses-permission>, mogą bezpośrednio wpływać na sposób filtrowania aplikacji przez Google Play. Sekcja Uprawnienia sugerujące wymagania funkcji zawiera pełny zbiór uprawnień, które sugerują, że funkcje są wymagane, i aktywują filtrowanie.

Specjalna obsługa funkcji Bluetooth

Przy określaniu filtrowania przez Bluetooth Google Play stosuje nieco inne reguły niż te opisane w poprzednim przykładzie.

Jeśli aplikacja deklaruje uprawnienia Bluetooth w elemencie <uses-permission>, ale nie deklaruje wyraźnie funkcji Bluetooth w elemencie <uses-feature>, Google Play sprawdza wersję platformy Androida, na której ma działać, zgodnie z informacją w elemencie <uses-sdk>.

Jak pokazano w tabeli poniżej, Google Play włącza filtrowanie na potrzeby funkcji Bluetooth tylko wtedy, gdy aplikacja zadeklaruje najniższą lub docelową platformę jako Android 2.0 (poziom interfejsu API 5) lub nowszy. Pamiętaj jednak, że jeśli aplikacja jawnie deklaruje funkcję Bluetooth w elemencie <uses-feature>, Google Play stosuje normalne reguły filtrowania.

Tabela 1. Jak Google Play określa wymagania dotyczące funkcji Bluetooth w przypadku aplikacji, która prosi o zezwolenie na Bluetooth, ale nie deklaruje jej w elemencie <uses-feature>.

Jeśli minSdkVersion to ... i targetSdkVersion to Wynik
Wartość <=4 lub <uses-sdk> nie jest zadeklarowana <=4 Google Play nie filtruje aplikacji na żadnym urządzeniu na podstawie zgłoszonej obsługi funkcji android.hardware.bluetooth.
<=4 >=5 Google Play odfiltrowuje aplikację ze wszystkich urządzeń, które nie obsługują funkcji android.hardware.bluetooth (w tym ze starszych wersji).
>=5 >=5

Poniższe przykłady pokazują różne efekty filtrowania w zależności od tego, jak Google Play obsługuje funkcję Bluetooth.

W pierwszym przykładzie aplikacja przeznaczona do działania na starszych poziomach interfejsów API deklaruje uprawnienia dotyczące Bluetootha, ale nie deklaruje funkcji Bluetooth w elemencie <uses-feature>.
Wynik: Google Play nie filtruje aplikacji z żadnego urządzenia.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" />
    ...
</manifest>
W drugim przykładzie ta sama aplikacja deklaruje również docelowy poziom interfejsu API o wartości „5”.
Wynik: Google Play zakłada teraz, że ta funkcja jest wymagana, i odfiltrowuje aplikację ze wszystkich urządzeń, które nie zgłaszają obsługi Bluetootha, w tym z urządzeń ze starszą wersją platformy.
<manifest ...>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="5" />
    ...
</manifest>
W tym przypadku ta sama aplikacja deklaruje teraz funkcję Bluetooth.
Wynik: taki sam jak w poprzednim przykładzie: zastosowano filtrowanie.
<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>
W tym przypadku ta sama aplikacja dodaje atrybut android:required="false".
Wynik: Google Play wyłącza filtrowanie na podstawie obsługi funkcji Bluetooth na wszystkich urządzeniach.
<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>

Testowanie funkcji wymaganych przez aplikację

Za pomocą narzędzia aapt2, które wchodzi w skład pakietu Android SDK, możesz określić, jak Google Play filtruje Twoją aplikację na podstawie zadeklarowanych funkcji i uprawnień. Aby to zrobić, uruchom aapt2 za pomocą polecenia dump badging. Powoduje to, że aapt2 analizuje plik manifestu Twojej aplikacji i określa wymagane funkcje przy użyciu tych samych reguł, których używa Google Play.

Aby użyć narzędzia, wykonaj następujące kroki:

  1. Utwórz i wyeksportuj swoją aplikację jako niepodpisany plik APK. Jeśli tworzysz aplikację w Android Studio, utwórz ją za pomocą Gradle w ten sposób:
    1. Otwórz projekt i wybierz Uruchom > Edytuj konfiguracje.
    2. Wybierz znak plusa w lewym górnym rogu okna Run/Debug Configurations (Konfiguracje uruchamiania/debugowania).
    3. Wybierz Gradle.
    4. Wpisz „Niepodpisany pakiet APK” w polu Nazwa.
    5. Wybierz moduł w sekcji Projekt Gradle.
    6. Na liście Lista zadań wpisz „AS” (montaż).
    7. Kliknij OK, aby zakończyć nową konfigurację.
    8. Upewnij się, że na pasku narzędzi jest wybrana konfiguracja uruchamiania Niepodpisany pakiet APK, a potem kliknij Uruchom > Uruchom „Niepodpisany pakiet APK”.
    Niepodpisany pakiet APK znajdziesz w katalogu <ProjectName>/app/build/outputs/apk/.
  2. Znajdź narzędzie aapt2, jeśli nie znajduje się jeszcze w ścieżce PATH. Jeśli używasz narzędzi SDK w wersji r8 lub nowszej, w katalogu <SDK>/build-tools/<tools version number> znajdziesz aapt2.

    Uwaga: musisz użyć wersji aapt2, która jest dostępna w przypadku najnowszego dostępnego komponentu Build-Tools. Jeśli nie masz najnowszego komponentu Build-Tools, pobierz go za pomocą Menedżera pakietów SDK na Androida.

  3. Uruchom polecenie aapt2 przy użyciu tej składni:
$ aapt2 dump badging <path_to_exported_.apk>

Oto przykład danych wyjściowych polecenia dla drugiego pokazanego wcześniej przykładu Bluetooth:

$ ./aapt2 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'

Informacje o funkcjach

W kolejnych sekcjach znajdziesz informacje o funkcjach sprzętu i oprogramowania, a także o zbiorach uprawnień, które sugerują określone wymagania dotyczące funkcji.

Funkcje sprzętowe

W tej sekcji omawiamy funkcje sprzętowe obsługiwane w najnowszej wersji platformy. Aby wskazać, że aplikacja używa funkcji sprzętowej lub jej wymaga, zadeklaruj odpowiednią wartość zaczynającą się od "android.hardware" w atrybucie android:name. Za każdym razem, gdy deklarujesz funkcję sprzętową, użyj osobnego elementu <uses-feature>.

Funkcje sprzętu audio

android.hardware.audio.low_latency
Aplikacja korzysta z potoku audio o małym czasie oczekiwania, który zmniejsza opóźnienia i opóźnienia podczas przetwarzania danych wejściowych lub wyjściowych dźwięku.
android.hardware.audio.output
Aplikacja przesyła dźwięk, korzystając z głośników urządzenia, gniazda słuchawek, funkcji strumieniowania Bluetooth lub podobnego mechanizmu.
android.hardware.audio.pro
Aplikacja korzysta z zaawansowanych funkcji audio i wydajności urządzenia.
android.hardware.microphone
Aplikacja nagrywa dźwięk przy użyciu mikrofonu urządzenia.

Funkcje sprzętowe Bluetooth

android.hardware.bluetooth
Aplikacja używa funkcji Bluetooth, zwykle do komunikacji z innymi urządzeniami obsługującymi Bluetooth.
android.hardware.bluetooth_le
Aplikacja używa funkcji nadajnika radiowego Bluetooth Low Energy.

Funkcje aparatu

Uwaga: aby uniknąć niepotrzebnego filtrowania aplikacji przez Google Play, dodaj parametr android:required="false" do funkcji aparatu, bez których Twoja aplikacja może działać. W przeciwnym razie Google Play uzna, że funkcja jest wymagana, i uniemożliwi urządzeniom, które nie obsługują tej funkcji, dostęp do aplikacji.

Obsługa dużego ekranu

Niektóre urządzenia z dużym ekranem nie obsługują wszystkich funkcji aparatu. Chromebooki zazwyczaj nie mają tylnych aparatów (z ustawionym światłem), autofokusa ani lampy błyskowej. Chromebooki mają jednak aparaty przednie (skierowane do użytkownika) i często są podłączone do kamer zewnętrznych.

Aby zapewnić podstawową obsługę aparatu i udostępnić aplikację na jak największej liczbie urządzeń, dodaj do manifestu aplikacji te ustawienia funkcji aparatu:

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

Dostosuj ustawienia funkcji do swoich potrzeb. Jeśli jednak chcesz, aby aplikacja była dostępna na jak największej liczbie urządzeń, zawsze dodawaj atrybut required, aby jednoznacznie określić, czy dana funkcja jest obowiązkowa.

Lista funkcji
android.hardware.camera.any

Aplikacja używa jednej z aparatów urządzenia lub kamery zewnętrznej podłączonej do urządzenia. Użyj tej funkcji zamiast funkcji android.hardware.camera lub android.hardware.camera.front, jeśli aplikacja nie wymaga, aby aparat był ustawiony tyłem (cały świat) lub przedni (użytkownik).

Uprawnienie CAMERA oznacza, że Twoja aplikacja używa też pola android.hardware.camera. Tylny aparat jest wymagany, chyba że instrukcja android.hardware.camera została zadeklarowana za pomocą android:required="false".

android.hardware.camera

Aplikacja używa tylnego aparatu (skierowanego do świata).

Uwaga: urządzenia, takie jak Chromebooki, które mają tylko aparat przedni (skierowanych do użytkownika), nie obsługują tej funkcji. Użyj android.hardware.camera.any, jeśli aplikacja może korzystać z dowolnego aparatu niezależnie od tego, w jakim kierunku jest ona skierowana.

Uwaga: uprawnienie CAMERA oznacza, że funkcja jest wymagana przez tylny aparat. Aby zapewnić prawidłowe filtrowanie w Google Play, gdy manifest aplikacji zawiera uprawnienie CAMERA, wyraźnie wskaż, że aplikacja korzysta z funkcji camera i wskaż, czy jest wymagana, na przykład:
<uses-feature android:name="android.hardware.camera" android:required="false" />

android.hardware.camera.front

Aplikacja korzysta z przedniego aparatu (skierowanego do użytkownika).

Uprawnienie CAMERA oznacza, że Twoja aplikacja używa też pola android.hardware.camera. Tylny aparat jest wymagany, chyba że instrukcja android.hardware.camera została zadeklarowana za pomocą android:required="false".

Uwaga: jeśli aplikacja używa android.hardware.camera.front, ale nie deklaruje wyraźnie android.hardware.camera w android.required="false", urządzenia bez tylnego aparatu (np. Chromebooki) będą filtrowane przez Google Play. Jeśli Twoja aplikacja obsługuje urządzenia tylko z przednim aparatem, zadeklaruj android.hardware.camera za pomocą parametru android.required="false", aby uniknąć niepotrzebnego filtrowania.

android.hardware.camera.external

Aplikacja komunikuje się z kamerą zewnętrzną, którą użytkownik łączy się z urządzeniem. Ta funkcja nie gwarantuje, że Twoja aplikacja będzie mogła korzystać z kamery zewnętrznej.

Uprawnienie CAMERA oznacza, że Twoja aplikacja używa też pola android.hardware.camera. Tylny aparat jest wymagany, chyba że instrukcja android.hardware.camera została zadeklarowana za pomocą android:required="false".

android.hardware.camera.autofocus

Aplikacja używa funkcji autofokusa obsługiwanej przez aparat urządzenia.

Uwaga: uprawnienie CAMERA wskazuje, że autofokus jest funkcją wymaganą. Aby zapewnić prawidłowe filtrowanie w Google Play, gdy manifest aplikacji zawiera uprawnienie CAMERA, wyraźnie określ, że Twoja aplikacja korzysta z funkcji autofokusu, i wskaż, czy jest ona wymagana, np.:
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />.

android.hardware.camera.flash

Aplikacja używa funkcji lampy błyskowej obsługiwanej przez aparat urządzenia.

android.hardware.camera.capability.manual_post_processing

Aplikacja używa funkcji MANUAL_POST_PROCESSING obsługiwanej przez aparat urządzenia.

Ta funkcja pozwala aplikacji zastąpić funkcję automatycznego balansu bieli aparatu. Użyj właściwości android.colorCorrection.transform, android.colorCorrection.gains i android.colorCorrection.mode o wartości TRANSFORM_MATRIX.

android.hardware.camera.capability.manual_sensor

Aplikacja używa funkcji MANUAL_SENSOR obsługiwanej przez aparat urządzenia.

Ta funkcja sugeruje obsługę blokady automatycznej ekspozycji (android.control.aeLock), która umożliwia ustawienie czasu i czułości ekspozycji kamery na określone wartości.

android.hardware.camera.capability.raw

Aplikacja używa funkcji RAW obsługiwanej przez aparat urządzenia.

Ta funkcja oznacza, że urządzenie może zapisywać nieprzetworzone pliki DNG. Aparat urządzenia dostarcza metadane związane z DNG, które są niezbędne, aby aplikacja mogła bezpośrednio przetworzyć nieprzetworzone obrazy.

android.hardware.camera.level.full
Aplikacja korzysta z obsługi przechwytywania obrazów na poziomie FULL zapewnianą przez co najmniej 1 aparat urządzenia. Obsługa FULL obejmuje możliwość robienia zdjęć seryjnych, sterowanie każdą klatką oraz ręczne sterowanie końcowe. Zobacz INFO_SUPPORTED_HARDWARE_LEVEL_FULL.

Funkcje sprzętowe interfejsu urządzenia

android.hardware.type.automotive

Aplikacja została zaprojektowana w taki sposób, aby pokazywać swój interfejs na ekranach w pojeździe. Użytkownik wchodzi w interakcję z aplikacją za pomocą przycisków twardych, przycisków dotykowych, kontrolerów obrotowych i interfejsów przypominających mysz. Ekrany pojazdu wyświetlają się zwykle na konsoli środkowej lub na konsoli przyrządów. Takie ekrany mają zwykle ograniczoną wielkość i rozdzielczość.

Uwaga: ponieważ użytkownik porusza się, gdy korzysta z tego typu interfejsu aplikacji, aplikacja musi ograniczać koncentrację kierowcy do minimum.

android.hardware.type.television

(Wycofano; zamiast niej użyj: android.software.leanback).

Aplikacja została zaprojektowana tak, aby wyświetlać swój interfejs na telewizorze. Ta funkcja definiuje „telewizor” jako typowy telewizor w salonie: aplikację wyświetlaną na dużym ekranie, użytkownika siedzącego z daleka, a główną formą korzystania z danych wejściowych jest pad kierunkowy, a nie mysz, wskaźnik czy urządzenie dotykowe.

android.hardware.type.watch
Aplikacja została zaprojektowana tak, aby pokazywać swój interfejs na zegarku. Zegarek nosisz na ciele, np. na nadgarstku. Podczas interakcji użytkownik znajduje się bardzo blisko urządzenia.
android.hardware.type.pc

Aplikacja została tak zaprojektowana, aby wyświetlać swój interfejs na Chromebookach. Ta funkcja wyłącza emulację wejścia myszy i touchpada, ponieważ Chromebooki używają sprzętu myszy i touchpada. Zobacz Wprowadzanie myszą.

Uwaga: ustaw dla tego elementu wartość required="false". W przeciwnym razie Sklep Google Play sprawi, że aplikacja będzie niedostępna na urządzeniach innych niż Chromebooki.

Funkcje czytnika linii papilarnych

android.hardware.fingerprint
Aplikacja odczytuje odciski palców za pomocą sprzętu biometrycznego urządzenia.

Funkcje sprzętowe pada do gier

android.hardware.gamepad
Aplikacja rejestruje dane wejściowe kontrolera gier pochodzące z samego urządzenia lub połączonego pada do gier.

Funkcje sprzętu na podczerwień

android.hardware.consumerir
Aplikacja wykorzystuje funkcje podczerwieni (IR) urządzenia, zwykle do komunikowania się z innymi konsumenckimi urządzeniami podczerwieni.

Funkcje sprzętowe lokalizacji

android.hardware.location
Aplikacja używa co najmniej 1 funkcji urządzenia do określania lokalizacji – np. lokalizacji GPS, lokalizacji sieciowej czy lokalizacji komórki.
android.hardware.location.gps

Aplikacja używa dokładnych współrzędnych lokalizacji uzyskanych z odbiornika GPS na urządzeniu.

Jeśli aplikacja korzysta z tej funkcji, oznacza to, że korzysta też z funkcji android.hardware.location, chyba że ta funkcja nadrzędna została zadeklarowana za pomocą atrybutu android:required="false".

android.hardware.location.network

Aplikacja używa przybliżonych współrzędnych lokalizacji uzyskanych z sieciowego systemu geolokalizacji obsługiwanego przez urządzenie.

Jeśli aplikacja korzysta z tej funkcji, oznacza to, że korzysta też z funkcji android.hardware.location, chyba że ta funkcja nadrzędna została zadeklarowana za pomocą atrybutu android:required="false".

Funkcje sprzętowe komunikacji NFC

android.hardware.nfc
Aplikacja używa dostępnych na urządzeniu funkcji komunikacji Near-Field Communication (NFC).
android.hardware.nfc.hce

Aplikacja używa emulacji karty NFC hostowanej na urządzeniu.

Funkcje sprzętowe OpenGL ES

android.hardware.opengles.aep
Aplikacja korzysta z pakietu rozszerzeń OpenGL ES na Androida zainstalowanego na urządzeniu.

Funkcje sprzętowe czujnika

android.hardware.sensor.accelerometer
Aplikacja wykrywa bieżącą orientację urządzenia na podstawie odczytów ruchu z akcelerometru urządzenia. Aplikacja może na przykład korzystać z odczytów z akcelerometru, aby określić, kiedy należy przełączyć się z orientacji pionowej na poziomą.
android.hardware.sensor.ambient_temperature
Aplikacja używa czujnika temperatury otoczenia (środowiskowego). Na przykład aplikacja pogodowa może podawać temperaturę w pomieszczeniach i na zewnątrz.
android.hardware.sensor.barometer
Aplikacja używa barometru urządzenia. Na przykład aplikacja pogodowa może podawać ciśnienie powietrza.
android.hardware.sensor.compass
Aplikacja używa magnetometru (kompasu) urządzenia. Na przykład aplikacja do nawigacji może pokazywać kierunek, w którym stoi użytkownik.
android.hardware.sensor.gyroscope
Aplikacja używa żyroskopu urządzenia do wykrywania obrotu i obrócenia, tworząc 6-osiowy system orientacji. Dzięki niemu aplikacja może sprawniej wykrywać, kiedy musi zmienić orientacja pionowa na poziomą.
android.hardware.sensor.hifi_sensors
Aplikacja korzysta z czujników wysokiej jakości (Hi-Fi). Na przykład gra mobilna może wykrywać bardzo precyzyjne ruchy użytkownika.
android.hardware.sensor.heartrate
Aplikacja używa pulsometru na urządzeniu. Na przykład aplikacja do fitnessu może raportować trendy tętna użytkownika na przestrzeni czasu.
android.hardware.sensor.heartrate.ecg
Aplikacja używa elektrokardiogramu (EKG) urządzenia. Na przykład aplikacja do fitnessu może podawać bardziej szczegółowe informacje o tętnie użytkownika.
android.hardware.sensor.light
Aplikacja używa czujnika światła urządzenia. Na przykład aplikacja może wyświetlać jeden z dwóch schematów kolorów na podstawie warunków oświetleniowych.
android.hardware.sensor.proximity
Aplikacja używa czujnika zbliżeniowego na urządzeniu. Aplikacja do połączeń telefonicznych może na przykład wyłączyć ekran urządzenia, gdy wykryje, że użytkownik zbliża je do swojego ciała.
android.hardware.sensor.relative_humidity
Aplikacja używa czujnika wilgotności względnej na urządzeniu. Na przykład aplikacja pogodowa może obliczać i raportować bieżący punkt rosy na podstawie wilgotności.
android.hardware.sensor.stepcounter
Aplikacja używa licznika kroków urządzenia. Na przykład aplikacja do fitnessu może raportować liczbę kroków, które musi wykonać użytkownik, aby osiągnąć docelową liczbę kroków dziennie.
android.hardware.sensor.stepdetector
Aplikacja używa wzorca do wykrywania kroków na urządzeniu. Na przykład aplikacja do fitnessu może na podstawie odstępu czasowego między krokami określać typ ćwiczenia wykonywanego przez użytkownika.

Funkcje sprzętowe ekranu

android.hardware.screen.landscape
android.hardware.screen.portrait

Aplikacja wymaga, aby urządzenie było w orientacji pionowej lub poziomej. Jeśli Twoja aplikacja obsługuje obie orientacje, nie musisz deklarować żadnej z tych funkcji.

Jeśli na przykład aplikacja wymaga orientacji pionowej, zadeklaruj tę funkcję, aby mogły ją uruchamiać tylko urządzenia, które obsługują orientację pionową (zawsze lub zgodnie z wyborem użytkownika):

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

Zakładamy, że obie orientacje nie są domyślnie wymagane, więc możesz instalować aplikację na urządzeniach, które obsługują jedną lub obie orientacje. Jeśli jednak któraś z aktywności wymaga, aby uruchamiała się w określonej orientacji przy użyciu atrybutu android:screenOrientation, ta deklaracja wskazuje, że aplikacja wymaga tej orientacji.

Jeśli na przykład zadeklarujesz właściwość android:screenOrientation za pomocą właściwości "landscape", "reverseLandscape" lub "sensorLandscape", aplikacja będzie dostępna tylko na urządzeniach, które obsługują orientację poziomą.

Sprawdzoną metodą jest zadeklarowanie wymagań dla tej orientacji za pomocą elementu <uses-feature>. Jeśli zadeklarujesz orientację aktywności przy użyciu atrybutu android:screenOrientation, ale w rzeczywistości jej nie potrzebujesz, możesz wyłączyć to wymaganie, deklarując orientację za pomocą elementu <uses-feature> i uwzględniając android:required="false".

Aby zapewnić zgodność wsteczną, każde urządzenie z Androidem 3.1 (poziom interfejsu API 12) lub niższym obsługuje zarówno orientację poziomą, jak i pionową.

Funkcje sprzętu telefonicznego

android.hardware.telephony
Aplikacja używa funkcji telefonicznych urządzenia, takich jak nadajnik radiowy z usługami komunikacyjnymi.
android.hardware.telephony.cdma

Aplikacja używa systemu telefonicznego CDMA (Code Division Multiple Access).

Jeśli aplikacja korzysta z tej funkcji, oznacza to, że korzysta też z funkcji android.hardware.telephony, chyba że ta funkcja nadrzędna została zadeklarowana w android:required="false".

android.hardware.telephony.gsm

Aplikacja korzysta z systemu radiowego Global System for Mobile Communications (GSM).

Jeśli aplikacja korzysta z tej funkcji, oznacza to, że korzysta też z funkcji android.hardware.telephony, chyba że ta funkcja nadrzędna została zadeklarowana w android:required="false".

Funkcje sprzętowe ekranu dotykowego

android.hardware.faketouch

Aplikacja wykorzystuje podstawowe zdarzenia interakcji polegającej na dotknięciu, takie jak dotknięcie i przeciąganie.

Gdy funkcja jest zadeklarowana jako wymagana, wskazuje, że aplikacja jest zgodna z urządzeniem tylko wtedy, gdy ma emulowany ekran dotykowy lub rzeczywisty ekran dotykowy.

Urządzenie oferujące fałszywy interfejs dotykowy ma system wprowadzania danych, który emuluje podzbiór funkcji ekranu dotykowego. Na przykład mysz lub pilot może sterować kursorem na ekranie.

Jeśli Twoja aplikacja wymaga podstawowej interakcji typu „wskaż i kliknięcie”, a nie działa tylko z kontrolerem pada kierunkowego, zadeklaruj tę funkcję. Jest to minimalny poziom interakcji dotykowej, dlatego możesz też korzystać z aplikacji, która deklaruje tę funkcję na urządzeniach, które mają bardziej złożone interfejsy dotykowe.

Aplikacje domyślnie wymagają funkcji android.hardware.faketouch. Jeśli chcesz, aby aplikacja była ograniczona do urządzeń wyposażonych tylko w ekran dotykowy, musisz wyraźnie zadeklarować, że ekran dotykowy jest wymagany:

<uses-feature android:name="android.hardware.touchscreen"
    android:required="true" />

Wszystkie aplikacje, które nie wymagają bezpośrednio android.hardware.touchscreen, jak pokazano w poniższym przykładzie, działają również na urządzeniach z atrybutem android.hardware.faketouch.

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
android.hardware.faketouch.multitouch.distinct

Aplikacja śledzi co najmniej dwa różne „palce” za pomocą fałszywego interfejsu dotykowego. To jest nadzbiór funkcji android.hardware.faketouch. Jeśli funkcja ta jest zadeklarowana jako wymagana, wskazuje, że aplikacja jest zgodna z urządzeniem tylko wtedy, gdy emuluje ono wyraźne śledzenie co najmniej 2 palców lub ma rzeczywisty ekran dotykowy.

W odróżnieniu od odrębnego interfejsu wielodotyku zdefiniowanego przez android.hardware.touchscreen.multitouch.distinct urządzenia wejściowe, które obsługują rozpoznawalny interfejs wielodotykowy z fałszywym interfejsem dotykowym, nie obsługują wszystkich gestów z użyciem 2 palców, ponieważ dane wejściowe są przekształcane w ruch kursora na ekranie. Oznacza to, że gesty z użyciem 1 palca na takim urządzeniu powodują przesunięcie kursora, przesuwania 2 palcami powodują zdarzenia polegające na dotknięciu 1 palcem, a inne gesty z użyciem 2 palców wywołują odpowiednie zdarzenia dotknięcia 2 palcami.

Tę funkcję może obsługiwać urządzenie z dotykowym touchpadem z 2 palcami umożliwiającymi przesuwanie kursora.

android.hardware.faketouch.multitouch.jazzhand

Aplikacja śledzi co najmniej pięć różnych „palców” przy użyciu fałszywego interfejsu dotykowego. To jest nadzbiór funkcji android.hardware.faketouch. Jeśli funkcja ta została zadeklarowana jako wymagana, wskazuje, że aplikacja jest zgodna z urządzeniem tylko wtedy, gdy emuluje ono wyraźne śledzenie co najmniej 5 palców lub ma rzeczywisty ekran dotykowy.

W odróżnieniu od odrębnej funkcji multidotyku zdefiniowanej przez android.hardware.touchscreen.multitouch.jazzhand urządzenia wejściowe, które obsługują wielodotyk jazzowy z fałszywym interfejsem dotykowym, nie obsługują wszystkich gestów wymagających 5 palców, ponieważ dane wejściowe są zamieniane na ruch kursora na ekranie. Oznacza to, że gesty z użyciem 1 palca na takim urządzeniu powodują przesunięcie kursora, gesty z użyciem wielu palców powodują zdarzenia polegające na dotknięciu 1 palcem, a inne gesty z użyciem wielu palców wywołują odpowiednie zdarzenia dotknięcia wieloma palcami.

Tę funkcję może obsługiwać urządzenie wyposażone w dotykowy touchpad z 5 palcami umożliwiającymi przesuwanie kursorem.

android.hardware.touchscreen

Do obsługi gestów, które są bardziej interaktywne niż w przypadku podstawowych zdarzeń dotyku, takich jak przewinięcie, aplikacja wykorzystuje funkcje ekranu dotykowego urządzenia. To jest nadzbiór funkcji android.hardware.faketouch.

Domyślnie wszystkie aplikacje wymagają tej funkcji, dlatego nie są dostępne dla urządzeń udostępniających tylko emulowany interfejs „fałszywego dotyku”. Możesz udostępnić swoją aplikację na urządzeniach z fałszywym interfejsem dotykowym, a nawet na urządzeniach wyposażonych tylko w kontroler kierunkowy. W tym celu wyraźnie zadeklaruj, że w przypadku korzystania z android.hardware.touchscreen i android:required="false" ekran dotykowy nie jest wymagany. Dodaj tę deklarację, jeśli Twoja aplikacja korzysta z rzeczywistego interfejsu dotykowego, ale nie wymaga. Wszystkie aplikacje, które nie wymagają android.hardware.touchscreen, działają też na urządzeniach z atrybutem android.hardware.faketouch.

Jeśli Twoja aplikacja wymaga interfejsu dotykowego, na przykład do wykonywania bardziej zaawansowanych gestów dotykowych, takich jak przesuwanie palcem, nie musisz deklarować żadnych funkcji interfejsu dotykowego, ponieważ są one wymagane domyślnie. Najlepiej jednak jest wyraźnie zadeklarować wszystkie funkcje, z których korzysta aplikacja.

Jeśli potrzebujesz bardziej złożonych interakcji dotykowych, np. gestów z użyciem wielu palców, zadeklaruj, że Twoja aplikacja używa zaawansowanych funkcji ekranu dotykowego.

android.hardware.touchscreen.multitouch

Aplikacja używa podstawowych funkcji urządzenia dotykowych dwupunktowych, np. ściągnięcia palcami, ale nie musi niezależnie śledzić dotknięć. To jest nadzbiór funkcji android.hardware.touchscreen.

Jeśli aplikacja korzysta z tej funkcji, oznacza to, że korzysta też z funkcji android.hardware.touchscreen, chyba że ta funkcja nadrzędna została zadeklarowana w android:required="false".

android.hardware.touchscreen.multitouch.distinct

Aplikacja wykorzystuje zaawansowane funkcje multi-touch na urządzeniu do niezależnego śledzenia 2 lub większej liczby punktów. Ta funkcja jest nadzbiorem funkcji android.hardware.touchscreen.multitouch.

Jeśli aplikacja korzysta z tej funkcji, oznacza to, że korzysta też z funkcji android.hardware.touchscreen.multitouch, chyba że ta funkcja nadrzędna została zadeklarowana w android:required="false".

android.hardware.touchscreen.multitouch.jazzhand

Aplikacja wykorzystuje zaawansowane funkcje multi-touch na urządzeniu do niezależnego śledzenia 5 punktów. Ta funkcja jest nadzbiorem funkcji android.hardware.touchscreen.multitouch.

Jeśli aplikacja korzysta z tej funkcji, oznacza to, że korzysta też z funkcji android.hardware.touchscreen.multitouch, chyba że ta funkcja nadrzędna została zadeklarowana w android:required="false".

Funkcje sprzętowe USB

android.hardware.usb.accessory
Aplikacja działa jak urządzenie USB i łączy się z hostami USB.
android.hardware.usb.host
Aplikacja korzysta z akcesoriów USB, które są podłączone do urządzenia. Urządzenie działa jako host USB.

Funkcje sprzętowe interfejsu Vulkan

android.hardware.vulkan.compute
Aplikacja korzysta z funkcji obliczeniowych Vulkan. Ta funkcja oznacza, że aplikacja wymaga implementacji interfejsu Vulkan z akceleracją sprzętową. Wersja funkcji wskazuje poziom opcjonalnych funkcji obliczeniowych, których wymaga aplikacja (poza wymaganiami interfejsu Vulkan 1.0). Jeśli na przykład Twoja aplikacja wymaga obsługi interfejsu Vulkan na poziomie 0, zadeklaruj tę funkcję:
<uses-feature
    android:name="android.hardware.vulkan.compute"
    android:version="0"
    android:required="true" />
Więcej informacji o wersji funkcji znajdziesz w sekcji FEATURE_VULKAN_HARDWARE_COMPUTE.
android.hardware.vulkan.level
Aplikacja korzysta z funkcji na poziomie interfejsu Vulkan. Ta funkcja oznacza, że aplikacja wymaga implementacji interfejsu Vulkan z akceleracją sprzętową. Wersja funkcji wskazuje poziom opcjonalnych funkcji sprzętowych, których wymaga aplikacja. Jeśli na przykład aplikacja wymaga obsługi sprzętu Vulkan na poziomie 0, zadeklaruj tę funkcję:
<uses-feature
    android:name="android.hardware.vulkan.level"
    android:version="0"
    android:required="true" />
Więcej informacji o wersji funkcji znajdziesz tutaj: FEATURE_VULKAN_HARDWARE_LEVEL.
android.hardware.vulkan.version
Aplikacja używa interfejsu Vulkan. Ta funkcja oznacza, że aplikacja wymaga implementacji interfejsu Vulkan z akceleracją sprzętową. Wersja funkcji wskazuje minimalną wersję interfejsu Vulkan API, która jest wymagana przez aplikację. Jeśli na przykład aplikacja wymaga obsługi interfejsu Vulkan 1.0, zadeklaruj tę funkcję:
<uses-feature
    android:name="android.hardware.vulkan.version"
    android:version="0x400003"
    android:required="true" />
Więcej informacji o wersji funkcji znajdziesz w sekcji FEATURE_VULKAN_HARDWARE_VERSION.

Funkcje sprzętu Wi-Fi

android.hardware.wifi
Aplikacja korzysta z funkcji sieciowych (Wi-Fi) 802.11 na urządzeniu.
android.hardware.wifi.direct
Aplikacja używa funkcji sieciowych Wi-Fi Direct na urządzeniu.

Funkcje oprogramowania

W tej sekcji omawiamy funkcje oprogramowania obsługiwane w najnowszej wersji platformy. Aby wskazać, że aplikacja korzysta z funkcji oprogramowania lub jej wymaga, zadeklaruj odpowiednią wartość zaczynającą się od "android.software" w atrybucie android:name. Za każdym razem, gdy deklarujesz funkcję oprogramowania, użyj osobnego elementu <uses-feature>.

Funkcje oprogramowania do komunikacji

android.software.sip
Aplikacja korzysta z usług SIP (Session Initiation Protocol). Dzięki SIP aplikacja może obsługiwać połączenia telefoniczne, takie jak rozmowy wideo i komunikatory.
android.software.sip.voip

Aplikacja korzysta z usług VoIP opartych na protokole SIP. Dzięki VoIP aplikacja może obsługiwać połączenia telefoniczne w czasie rzeczywistym, np. dwukierunkowe rozmowy wideo.

Jeśli aplikacja korzysta z tej funkcji, oznacza to, że korzysta też z funkcji android.software.sip, chyba że ta funkcja nadrzędna została zadeklarowana w android:required="false".

android.software.webview
Aplikacja wyświetla treści z internetu.

Niestandardowe funkcje oprogramowania do wprowadzania danych

android.software.input_methods
Aplikacja używa nowej metody wprowadzania, którą deweloper zdefiniuje w InputMethodService.

Funkcje oprogramowania do zarządzania urządzeniami

android.software.backup
Aplikacja zawiera funkcje logiczne umożliwiające obsługę operacji tworzenia i przywracania kopii zapasowej.
android.software.device_admin
Aplikacja używa administratorów urządzenia do egzekwowania zasad dotyczących urządzeń.
android.software.managed_users
Aplikacja obsługuje użytkowników dodatkowych i profile zarządzane.
android.software.securely_removes_users
Aplikacja może trwale usuwać użytkowników i powiązane z nimi dane.
android.software.verified_boot
Aplikacja zawiera logikę obsługującą wyniki funkcji zweryfikowanego uruchamiania urządzenia, która wykrywa, czy konfiguracja urządzenia zmieni się podczas operacji ponownego uruchamiania.

Funkcje oprogramowania do multimediów

android.software.midi
Aplikacja łączy się z instrumentami muzycznymi lub odtwarza dźwięk za pomocą protokołu MIDI (Musical Instrument Digital Interface).
android.software.print
Aplikacja zawiera polecenia do drukowania dokumentów wyświetlanych na urządzeniu.
android.software.leanback
Aplikacja została zaprojektowana tak, aby działała na urządzeniach z Androidem TV.
android.software.live_tv
Aplikacja strumieniuje programy telewizyjne na żywo.

Funkcje oprogramowania interfejsu ekranu

android.software.app_widgets
Aplikacja korzysta z widżetów aplikacji lub udostępnia je. Jest przeznaczona wyłącznie na urządzenia z ekranem głównym lub w podobnym miejscu, w którym użytkownicy mogą je umieszczać.
android.software.home_screen
Aplikacja działa jak zamiennik ekranu głównego urządzenia.
android.software.live_wallpaper
Aplikacja używa tapet z animacją lub udostępnia je.

Uprawnienia sugerujące wymagania funkcji

Niektóre stałe funkcji sprzętu i oprogramowania są udostępniane aplikacjom po odpowiednim interfejsie API. Z tego powodu niektóre aplikacje mogą używać interfejsu API, zanim będą mogły zadeklarować, że wymagają tego interfejsu API za pomocą systemu <uses-feature>.

Aby zapobiec przypadkowemu udostępnianiu tych aplikacji, Google Play zakłada, że niektóre uprawnienia związane ze sprzętem wskazują, że funkcje sprzętowe są domyślnie wymagane. Na przykład aplikacje korzystające z Bluetootha muszą prosić o uprawnienie BLUETOOTH w elemencie <uses-permission>.

W przypadku starszych aplikacji Google Play zakłada, że deklaracja uprawnień oznacza, że wymagana jest podstawowa funkcja android.hardware.bluetooth, i na jej podstawie konfiguruje filtrowanie. Tabela 2 zawiera listę uprawnień, które sugerują wymagania dotyczące funkcji równoważne z zadeklarowanymi w elementach <uses-feature>.

Deklaracje <uses-feature>, w tym wszelkie zadeklarowane atrybuty android:required, mają zawsze pierwszeństwo przed funkcjami określonymi przez uprawnienia podane w tabeli 2. W przypadku dowolnego z tych uprawnień możesz wyłączyć filtrowanie na podstawie domniemanej funkcji, jawnie zadeklarując funkcję w elemencie <uses-feature> z atrybutem required ustawionym na false.

Aby na przykład wyłączyć filtrowanie na podstawie uprawnienia CAMERA, dodaj do pliku manifestu te deklaracje <uses-feature>:

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

Uwaga: jeśli Twoja aplikacja jest kierowana na Androida 5.0 (poziom interfejsu API 21) lub nowszego i korzysta z uprawnienia ACCESS_COARSE_LOCATION lub ACCESS_FINE_LOCATION do otrzymywania aktualizacji lokalizacji odpowiednio z sieci lub z GPS-a, musisz też wyraźnie zadeklarować, że aplikacja korzysta z funkcji sprzętowych android.hardware.location.network lub android.hardware.location.gps.

Tabela 2. Uprawnienia urządzenia sugerujące korzystanie z urządzenia.

Kategoria Uprawnienia Domniemane wymaganie funkcji
Bluetooth BLUETOOTH android.hardware.bluetooth

Szczegóły znajdziesz w sekcji Specjalna obsługa funkcji Bluetooth.

BLUETOOTH_ADMIN android.hardware.bluetooth
Aparat CAMERA android.hardware.camera
android.hardware.camera.autofocus
Lokalizacja 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

android.hardware.location.network(Tylko wtedy, gdy docelowy poziom interfejsu API to 20 lub niższy).

ACCESS_FINE_LOCATION

android.hardware.location

android.hardware.location.gps(Tylko wtedy, gdy docelowy poziom interfejsu API to 20 lub niższy).

Mikrofon RECORD_AUDIO android.hardware.microphone
Telefonia 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
Wi-Fi ACCESS_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_STATE android.hardware.wifi
CHANGE_WIFI_MULTICAST_STATE android.hardware.wifi