Interfejsy API Androida 2.3

Poziom API: 9

Dla deweloperów platforma Android 2.3 (GINGERBREAD) jest dostępna jako komponent pakietu Android SDK, który można pobrać. Platforma do pobrania zawiera bibliotekę Androida i obraz systemu, a także zestaw skórek emulatorów. Aby rozpocząć tworzenie i testowanie pod kątem Androida 2.3, pobierz platformę do swojego pakietu SDK za pomocą Menedżera pakietu Android SDK.

Omówienie interfejsu API

Sekcje poniżej zawierają omówienie nowości dla programistów w wersji 2.3, w tym informacje o nowych funkcjach i zmianach wprowadzonych w interfejsie API platformy od poprzedniej wersji.

VoIP oparty na SIP

Platforma zawiera teraz stos protokołów SIP i platformowy interfejs API, który umożliwia programistom tworzenie aplikacji telefonii internetowej. Dzięki interfejsowi API aplikacje mogą oferować funkcje połączeń głosowych bez konieczności zarządzania sesjami, komunikacją czy dźwiękiem na poziomie transportowym. Obsługę tych funkcji zajmuje się w sposób przejrzysty interfejs SIP API oraz usługi platformy.

Interfejs SIP API jest dostępny w pakiecie android.net.sip. Klasa klucza to SipManager. Aplikacje tego używają do konfigurowania profili SIP i zarządzania nimi, a następnie inicjowania połączeń głosowych i odbierania połączeń głosowych. Po nawiązaniu połączenia głosowego aplikacje mogą m.in. wyciszyć rozmowy, włączyć tryb głośnika i wysyłać sygnały DTMF. Aplikacje mogą też używać SipManager do tworzenia ogólnych połączeń SIP.

Podstawowy stos SIP i usługi platformy są dostępne na urządzeniach według uznania producenta i powiązanego operatora. Dlatego przed udostępnieniem funkcji nawiązywania połączeń aplikacje powinny używać metody isApiSupported(), aby sprawdzić, czy jest dostępna obsługa SIP.

Aby korzystać z interfejsu SIP API, aplikacje muszą prosić użytkownika o pozwolenie, deklarując <uses-permission android:name="android.permission.INTERNET"> i <uses-permission android:name="android.permission.USE_SIP"> w plikach manifestu.

Deweloperzy mogą też poprosić o filtrowanie w Google Play, aby ich aplikacje nie były widoczne dla użytkowników, których urządzenia nie zawierają stosu SIP platformy ani usług. Aby poprosić o filtrowanie, dodaj do pliku manifestu aplikacji <uses-feature android:name="android.software.sip" android:required="true"> i <uses-feature android:name="android.software.sip.voip">.

Więcej informacji znajdziesz w przewodniku dla programistów SIP.

Komunikacja Near Field Communication (NFC)

Android 2.3 obejmuje stos NFC i interfejs API platformy, który umożliwia programistom odczytywanie tagów NDEF wykrywanych, gdy użytkownik dotyka urządzenia z NFC, by otagować elementy w naklejkach, inteligentnych plakatach, a nawet innych urządzeniach.

Platforma udostępnia podstawowe usługi NFC, które współpracują ze sprzętem urządzenia przy wykrywaniu tagów, gdy znajdują się w zasięgu. Po wykryciu tagu platforma powiadamia aplikacje, transmitując intencję i dołączając do niej komunikaty NDEF tagu jako dodatki. Aplikacje mogą tworzyć filtry intencji, aby rozpoznawać i obsługiwać kierowane tagi i wiadomości. Na przykład po otrzymaniu tagu za pomocą intencji aplikacje wyodrębniają wiadomości NDEF, przechowują je, powiadamiają użytkownika lub obsługują je w inny sposób.

Interfejs NFC API jest dostępny w pakiecie android.nfc. Klasy kluczy to:

  • NfcAdapter, który reprezentuje sprzęt NFC urządzenia.
  • NdefMessage, który reprezentuje wiadomość z danymi NDEF, czyli standardowy format przesyłania danych między urządzeniami i tagami. Aplikacje mogą odbierać te wiadomości z intencji ACTION_TAG_DISCOVERED.
  • NdefRecord, dostarczany w elemencie NdefMessage, który opisuje typ udostępnianych danych i przenosi same dane.

Komunikacja NFC opiera się na technologii bezprzewodowej w sprzęcie urządzenia, dlatego to obsługa funkcji NFC platformy na określonych urządzeniach zależy od jej producenta. Aby ustalić, czy bieżące urządzenie obsługuje komunikację NFC, aplikacje mogą wywołać metodę isEnabled(), by wysłać zapytanie do systemu NfcAdapter. Niezależnie od obsługi sprzętowej interfejs NFC jest zawsze dostępny.

Aby korzystać z interfejsu NFC API, aplikacje muszą prosić użytkownika o zgodę, deklarując <uses-permission android:name="android.permission.NFC"> w plikach manifestu.

Deweloperzy mogą też poprosić o filtrowanie w Google Play, tak aby ich aplikacje nie były widoczne dla użytkowników, których urządzenia nie obsługują NFC. Aby poprosić o filtrowanie, dodaj <uses-feature android:name="android.hardware.nfc" android:required="true"> do pliku manifestu aplikacji.

Przykładową aplikację, która korzysta z interfejsu API NFC, znajdziesz NFCDemo.

Żyroskop i inne czujniki

Android 2.3 dodaje obsługę platformy i interfejsu API w przypadku kilku nowych typów odczytu czujników: żyroskopu, wektora obrotowego, przyspieszenia liniowego, grawitacji i barometru. Deweloperzy mogą wykorzystać odczyty z czujników do tworzenia aplikacji, które szybko i płynnie reagują na dokładne zmiany położenia urządzenia i ruchu. Interfejs Sensor API zgłasza żyroskop i inne zmiany w czujnikach w zainteresowanych aplikacjach, niezależnie od tego, czy działają one w środowisku aplikacji, czy w kodzie natywnym.

Pamiętaj, że producent urządzenia może mieć różne zestawy czujników sprzętowych dostępnych w danym urządzeniu.

Deweloperzy mogą poprosić o filtrowanie w Google Play, tak aby ich aplikacje nie były widoczne dla użytkowników, których urządzenia nie mają żyroskopu. Aby to zrobić, dodaj <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"> do pliku manifestu aplikacji.

Szczegółowe informacje o interfejsie API znajdziesz na stronie Sensor.

Obsługa wielu aparatów

Aplikacje mogą teraz korzystać z dowolnych aparatów dostępnych w urządzeniu do robienia zdjęć lub nagrywania filmów. Dzięki Camera aplikacje mogą wysyłać zapytania o liczbę dostępnych kamer i ich unikalne cechy.

Przykładowy kod dostępu do przedniego aparatu znajdziesz w pliku CameraPreview.java w przykładowej aplikacji ApiDemos.

Interfejs Camera API dodaje też:

Mieszane efekty dźwiękowe

Platforma multimedialna na platformie dodała obsługę nowych efektów dźwiękowych z poszczególnych ścieżek i globalnych efektów dźwiękowych, takich jak wzmocnienie basów, wirtualizacja słuchawek, korekta dźwięku i pogłos.

Przykładowy kod efektów dźwiękowych znajdziesz w AudioFxDemo.java w przykładowej aplikacji ApiDemos.

Struktura medialna zawiera też:

  • Nowa obsługa tagu wysokości w metadanych EXIF w plikach JPEG. Nowa metoda getAltitude() do pobierania wartości tagu wysokości EXIF.
  • Nowa metoda setOrientationHint() umożliwia aplikacji określenie orientacji (MediaRecorder) podczas nagrywania filmu.

Menedżer pobierania

Platforma ta zawiera nową usługę systemową DownloadManager, która obsługuje długotrwałe pobieranie plików za pomocą protokołu HTTP. Aplikacje mogą prosić o pobranie identyfikatora URI do określonego pliku docelowego. DownloadManager wykona pobieranie w tle, obsługując interakcje HTTP oraz ponawia próby pobrania w przypadku awarii, zmian połączeń i ponownego uruchomienia systemu.

  • Aplikacje mogą uzyskać instancję klasy DownloadManager, wywołując getSystemService(String) i przekazując DOWNLOAD_SERVICE. Aplikacje, które żądają pobierania za pomocą tego interfejsu API, powinny rejestrować odbiornik transmisji ACTION_NOTIFICATION_CLICKED, aby prawidłowo obsługiwać kliknięcia trwającego pobierania w powiadomieniu lub w interfejsie pobierania.
  • Klasa DownloadManager.Request pozwala aplikacji udostępnić wszystkie informacje niezbędne do żądania nowego pobrania, takie jak identyfikator URI żądania i miejsce docelowe pobierania. Identyfikator URI żądania jest jedynym wymaganym parametrem. Pamiętaj, że domyślnym miejscem docelowym pobierania jest wolumin współdzielony, z którego system może usunąć plik, jeśli będzie musiał zwolnić miejsce na potrzeby systemu. Aby pobrać pliki w pamięci zewnętrznej, określ miejsce docelowe w pamięci zewnętrznej (patrz setDestinationUri(Uri)).
  • Klasa DownloadManager.Query udostępnia metody, które umożliwiają aplikacji odpytywanie i filtrowanie aktywnych pobranych plików.

Tryb rygorystyczny

Aby pomóc deweloperom w monitorowaniu i poprawianiu wydajności aplikacji, platforma ta udostępnia nową funkcję systemową o nazwie StrictMode. Gdy implementuje się w aplikacji, StrictMode wychwytuje i powiadamia dewelopera o przypadkowej aktywności dysku lub sieci, która może pogorszyć wydajność aplikacji, na przykład gdy jest ona wykonywana w głównym wątku aplikacji (w którym są odbierane operacje interfejsu i odbywają się również animacje). Deweloperzy mogą ocenić problemy z wykorzystaniem sieci i dysku zgłoszone w zasadzie StrictMode i w razie potrzeby je skorygować. Pozwoli to zachować większą elastyczność wątku głównego i zapobiegnie wyświetlaniu użytkownikom okien ANR.

  • StrictMode jest klasą podstawową i głównym punktem integracji z systemem i maszyną wirtualną. Klasa udostępnia wygodne metody zarządzania zasadami dotyczącymi wątków i maszyn wirtualnych, które mają zastosowanie do instancji.
  • Reguły StrictMode.ThreadPolicy i StrictMode.VmPolicy zawierają zasady zdefiniowane przez Ciebie i stosowane do instancji maszyn wirtualnych i wątków.

Więcej informacji o używaniu StrictMode do optymalizacji aplikacji znajdziesz w dokumentacji klas i przykładowym kodzie na stronie android.os.StrictMode.

Platforma UI

  • Obsługa nadmiernych przewijania.
    • Nowa obsługa dalekiego przewijania w widokach i widżetach. W widokach danych aplikacje mogą włączać i wyłączać nadmierną przewijanie w danym widoku, włączać tryb Overscoll, kontrolować odległość od przewijania oraz obsługiwać wyniki nadmiernego przewijania.
    • W Widżetach aplikacje mogą kontrolować parametry sygnalizowania końca przewijania, np. animację, sprężyny i odległość przewijania. Więcej informacji można znaleźć na stronach android.view.View i android.widget.OverScroller.
    • ViewConfiguration udostępnia też metody getScaledOverflingDistance() i getScaledOverscrollDistance().
    • Nowe atrybuty overScrollMode, overScrollFooter i overScrollHeader dla elementów <ListView> do kontrolowania zachowania nadmiernych przewijania.
  • Obsługa filtrowania dotykowego.
    • Nowa obsługa filtrowania dotykowego, która umożliwia aplikacji zwiększenie bezpieczeństwa widoków zapewniających dostęp do poufnych funkcji. Filtrowanie dotykiem pozwala na przykład zapewnić bezpieczeństwo działań użytkownika, takich jak przyznanie uprawnień, dokonanie zakupu czy kliknięcie reklamy. Więcej informacji znajdziesz w wyświetlaniu dokumentacji zajęć.
    • Nowy atrybut filterTouchesWhenObscured do elementów widoku, który określa, czy mają być filtrowane dotknięcia, gdy okno widoku jest zasłonięte przez inne widoczne okno. Gdy ustawisz "true", widok nie będzie otrzymywać dotyk, gdy nad jego oknem pojawi się toast, okno lub inne okno. Więcej informacji znajdziesz w artykule Wyświetlanie dokumentacji zabezpieczeń.

    Przykładowy kod do filtrowania dotykowego znajdziesz w pliku SecureView.java w przykładowej aplikacji ApiDemos.

  • Ulepszone zarządzanie zdarzeniami:
    • Nowa klasa bazowa dla zdarzeń wejściowych: InputEvent. Klasa udostępnia metody, które pozwalają aplikacjom określać znaczenie zdarzenia, np. wysyłając zapytanie o urządzenie wejściowe, z którego zainicjowano zdarzenie. KeyEvent i MotionEvent są podklasami InputEvent.
    • Nowa klasa bazowa dla urządzeń wejściowych: InputDevice. Klasa przechowuje informacje o możliwościach danego urządzenia wejściowego i udostępnia metody, które pozwalają aplikacjom określać sposób interpretowania zdarzeń z tego urządzenia.
  • Ulepszone zdarzenia ruchu
    • Rozszerzyliśmy interfejs API MotionEvent o informacje o identyfikatorze wskaźnika, które pozwalają aplikacjom śledzić poszczególne palce poruszające się w górę i w dół. Klasa dodaje różne metody, które pozwalają aplikacji wydajnie pracować ze zdarzeniami ruchu.
    • System wprowadzania danych korzysta teraz z logiki generowania zdarzeń ruchu na podstawie nowych informacji o identyfikatorze wskaźnika, syntetyzując identyfikatory w miarę nieużywania wskaźników. System osobno śledzi wiele identyfikatorów wskaźników podczas zdarzenia ruchu i dba o odpowiednią ciągłość wskaźników, oceniając odległość między ostatnim a następnym zestawem wskaźników.
  • Elementy sterujące zaznaczaniem tekstu
    • Nowa metoda setComposingRegion umożliwia aplikacji oznaczenie obszaru tekstu jako tworzonego tekstu z zachowaniem bieżącego stylu. Metoda getSelectedText zwraca wybrany tekst do aplikacji. Metody są dostępne w językach BaseInputConnection, InputConnection i InputConnectionWrapper.
    • Nowe atrybuty textSelectHandle, textSelectHandleLeft, textSelectHandleRight i textSelectHandleWindowStyle dotyczące elementu <TextView> do odwoływania się do elementów rysowanych, które będą używane do wyświetlania kotwic wyboru tekstu oraz stylu okna nadrzędnego.
  • Zarządzanie aktywnością
  • Style tekstów powiadomień i ikon
  • Bardzo duże ekrany

    Platforma obsługuje teraz ekrany o bardzo dużych rozmiarach, np. w tabletach. Deweloperzy mogą wskazać, że ich aplikacje są dostosowane do obsługi bardzo dużych ekranów, dodając element <supports screens ... android:xlargeScreens="true"> do plików manifestu. Aplikacje mogą korzystać z nowego kwalifikatora zasobów (xlarge) do tagowania zasobów przeznaczonych na bardzo duże ekrany. Informacje o obsłudze bardzo dużych i innych rozmiarów ekranu znajdziesz w artykule Obsługa wielu ekranów.

    Grafika

    Dostawcy treści

    • Nowa klasa dostawcy AlarmClock do ustawiania alarmu lub obsługi alarmu. Dostawca zawiera intencję ACTION_SET_ALARM i dodatkowe elementy, których można użyć do uruchomienia działania w celu ustawienia nowego alarmu w aplikacji budzika. Aplikacje, które chcą otrzymywać intencję SET_ALARM, powinny utworzyć działanie wymagające uprawnienia SET_ALARM. Aplikacje, które chcą utworzyć nowy alarm, powinny używać Context.startActivity(), aby użytkownik mógł wybrać aplikację budzika.
    • MediaStore obsługuje nowe działanie intencji (PLAY_FROM_SEARCH), które umożliwia aplikacji wyszukiwanie multimediów z muzyką i automatyczne odtwarzanie treści z wyniku, gdy jest to możliwe. Na przykład aplikacja może uruchomić tę intencję w efekcie polecenia rozpoznawania głosu, by posłuchać muzyki.
    • MediaStore dodaje też nową flagę MEDIA_IGNORE_FILENAME, która informuje skanera multimediów, że ma ignorować multimedia w katalogu zawierającym i jego podkatalogach. Deweloperzy mogą dzięki temu uniknąć wyświetlania grafiki w Galerii aplikacji oraz zapobiegać wyświetlaniu w niej dźwięków i muzyki z aplikacji.
    • Dostawca Settings dodaje nowe działania związane z aktywnością APPLICATION_DETAILS_SETTINGS i MANAGE_ALL_APPLICATIONS_SETTINGS, które umożliwiają aplikacji wyświetlanie ekranu ze szczegółowymi informacjami o konkretnej aplikacji lub ekran Zarządzaj aplikacjami.
    • Dostawca ContactsContract dodaje rodzaj danych ContactsContract.CommonDataKinds.SipAddress do przechowywania adresu SIP (telefonu internetowego) kontaktu.

    Lokalizacja

    • LocationManager śledzi teraz żądania aplikacji, które skutkują blokadami uśpienia lub Wi-Fi zgodnie z klasą zarządzaną przez system WorkSource, która identyfikuje aplikację.

      LocationManager śledzi wszystkich klientów żądających okresowych aktualizacji i informuje swoich dostawców o nich jako parametr WorkSource podczas ustawiania minimalnego czasu aktualizacji. Dostawca lokalizacji sieciowej używa WorkSource do śledzenia blokad uśpienia i Wi-Fi inicjowanych przez aplikację, a następnie dodaje je do wykorzystania baterii przez aplikację raportowanego w sekcji Zarządzaj aplikacjami.

    • LocationManager dodaje kilka nowych metod, które pozwalają rejestru aktywności otrzymywać okresowe lub jednorazowe aktualizacje lokalizacji na podstawie określonych kryteriów (patrz poniżej).
    • Nowa klasa Criteria umożliwia aplikacji określenie zestawu kryteriów wyboru dostawcy lokalizacji. Dostawcy mogą być np. porządkowani według dokładności, zużycia energii, możliwości raportowania wysokości, prędkości, kierunku jazdy i kosztów pieniężnych.

    Pamięć

    • W Androidzie 2.3 dodaliśmy nowy StorageManager, który obsługuje pliki OBB (Opaque Binary Blob). Chociaż obsługa OBB przez platformę jest dostępna w Androidzie 2.3, narzędzia programistyczne do tworzenia plików OBB i zarządzania nimi będą dostępne dopiero na początku 2011 roku.
    • Platforma Android 2.3 dodaje oficjalną obsługę urządzeń bez kart SD (chociaż umożliwia korzystanie z wirtualnej partycji na karcie SD, jeśli nie jest dostępna fizyczna karta SD). Wygodna metoda (isExternalStorageRemovable()) pozwala aplikacjom określić, czy dostępna jest fizyczna karta SD.

    Menedżer pakietów

    Telefonia

    Dostęp natywny do cyklu życia aktywności, okien

    Android 2.3 udostępnia szeroki zestaw interfejsów API aplikacjom korzystającym z kodu natywnego. Do klas platform, które są odpowiednie dla takich aplikacji, należą:

    • NativeActivity to nowy typ klasy aktywności, którego wywołania zwrotne cyklu życia są zaimplementowane bezpośrednio w kodzie natywnym. NativeActivity i jego bazowy kod natywny uruchamiają się w systemie tak samo jak inne działania – w szczególności działają w procesie systemu aplikacji na Androida i w głównym wątku interfejsu aplikacji. Otrzymują te same wywołania zwrotne cyklu życia co inne działania.
    • Nowa klasa InputQueue i interfejs wywołania zwrotnego pozwalają natywnemu kodowi zarządzać kolejnością zdarzeń w kolejce.
    • Nowy interfejs SurfaceHolder.Callback2 umożliwia kodowi natywnym zarządzanie SurfaceHolder.
    • Nowe metody takeInputQueue i takeSurface() w języku Window pozwalają kodowi natywnemu zarządzać zdarzeniami i platformami.

    Pełne informacje o pracy z kodem natywnym i pobieraniu pakietu NDK znajdziesz na stronie Android NDK.

    Środowisko wykonawcze Dalvik

    Nowe elementy i atrybuty pliku manifestu

    • Nowy atrybut xlargeScreens dla elementu <supports-screens>, który wskazuje, czy aplikacja obsługuje bardzo duże formaty ekranu. Szczegółowe informacje znajdziesz w artykule Obsługa wielu ekranów.
    • Nowe wartości atrybutu android:screenOrientation elementu <activity>:
      • "reverseLandscape" – funkcja chce, aby ekran był w orientacji poziomej i w przeciwnym kierunku niż normalnie.
      • "reversePortrait" – działanie chce, aby ekran miał orientację pionową i był on obrócony w przeciwnym kierunku niż normalna pionowa.
      • "sensorLandscape" – działanie chce mieć ekran w orientacji poziomej, ale może użyć czujnika do zmiany kierunku ekranu.
      • "sensorPortrait" – działanie chce mieć ekran w orientacji pionowej, ale może użyć czujnika do zmiany kierunku ekranu.
      • "fullSensor" – orientacja jest określana na podstawie fizycznego czujnika orientacji. Ekran będzie się obracać w zależności od tego, jak użytkownik się porusza. Możesz wybrać jeden z 4 możliwych obrotów, niezależnie od tego, co normalnie robi urządzenie (np. niektóre urządzenia zwykle nie obracają o 180 stopni).

    Nowe uprawnienia

    • com.android.permission.SET_ALARM – pozwala aplikacji na transmisję intencji w celu ustawienia alarmu dla użytkownika. Działanie, które obsługuje działanie intencji SET_ALARM, powinno wymagać tego uprawnienia.
    • android.permission.USE_SIP – pozwala aplikacji używać interfejsu SIP API do wykonywania i odbierania połączeń przez internet.
    • android.permission.NFC – umożliwia aplikacji korzystanie z interfejsu NFC API do odczytywania tagów NFC.

    Stałe nowych funkcji

    Platforma dodaje kilka nowych funkcji sprzętowych, które deweloperzy mogą zadeklarować w plikach manifestu jako wymagane przez aplikacje. Dzięki temu deweloperzy mogą kontrolować sposób filtrowania aplikacji po opublikowaniu w Google Play.

    Pełne informacje o deklarowaniu funkcji i używaniu ich do filtrowania znajdziesz w dokumentacji <uses-feature>.

    Raport Różnice w interfejsach API

    Szczegółowe informacje o wszystkich zmianach w interfejsach API w Androidzie 2.3 (poziom 9 interfejsu API) znajdziesz w raporcie Różnice w interfejsach API.

    Poziom API

    Platforma Android 2.3 udostępnia zaktualizowaną wersję interfejsu API platformy. Do interfejsu API Androida 2.3 jest przypisany identyfikator w postaci liczby całkowitej (9), który jest przechowywany w samym systemie. Ten identyfikator, nazywany „poziomem interfejsu API”, pozwala systemowi przed jej zainstalowaniem prawidłowo określić, czy aplikacja jest z nim zgodna.

    Aby korzystać w aplikacji z interfejsów API wprowadzonych w Androidzie 2.3, należy skompilować ją z biblioteką Androida dostępną na platformie SDK Androida 2.3. W zależności od potrzeb może być też konieczne dodanie atrybutu android:minSdkVersion="9" do elementu <uses-sdk> w pliku manifestu aplikacji. Jeśli Twoja aplikacja jest przeznaczona do działania wyłącznie na Androidzie 2.3 lub nowszym, zadeklarowanie tego atrybutu uniemożliwia jej zainstalowanie we wcześniejszych wersjach platformy.

    Więcej informacji znajdziesz w artykule Co to jest poziom interfejsu API.