Interfejsy API Androida 3.0

Poziom API: 11

Dla programistów platforma Android 3.0 Dokument (HONEYCOMB) jest dostępny do pobrania dla pakietu Android SDK. Platforma do pobrania zawiera bibliotekę i system Androida oraz zestaw skórek emulatora i inne elementy. Platforma do pobrania nie zawiera żadnych zewnętrznych biblioteki.

Dla programistów platforma Android 3.0 jest dostępna jako dostępny do pobrania komponent Android SDK. Platforma do pobrania zawiera biblioteki Androida i obraz systemu, a także zestaw skórek emulatora i innych. Aby rozpocząć tworzenie lub testowanie aplikacji na Androida 3.0, użyj Menedżera pakietu Android SDK, aby pobrać platformę do swojego pakietu SDK.

Omówienie interfejsu API

W sekcjach poniżej znajdziesz techniczny przegląd nowości dla programistów w Androidzie 3.0, w tym nowe funkcje i zmiany w interfejsie API od poprzedniej wersji.

Fragmenty

Fragment to nowy komponent struktury, który umożliwia rozdzielenie poszczególnych elementów aktywności w samodzielne moduły, które definiują własny interfejs użytkownika i cykl życia. Aby utworzyć fragment, musisz rozszerzyć klasę Fragment i zaimplementować kilka metod wywołania zwrotnego cyklu życia, podobnych do metody Activity. Następnie możesz połączyć kilka fragmentów w jednym działaniu, aby utworzyć interfejs z wieloma panelami, w których każdy panel zarządza własnym cyklem życia i danymi wejściowymi użytkownika.

Fragment możesz też użyć bez udostępniania interfejsu użytkownika, a zamiast tego użyć go jako element roboczy dla aktywności, np. do zarządzania postępem pobierania, który odbywa się tylko podczas wykonywania aktywności.

Dodatkowo:

  • Fragmenty są samodzielne i można ich używać w różnych działaniach
  • Możesz dodawać, usuwać, zastępować i animować fragmenty w ramach aktywności.
  • Możesz dodawać fragmenty do stosu elementów zarządzanego przez aktywność, zachowując stan fragmentów w miarę ich zmiany i pozwalając użytkownikowi na przechodzenie wstecz przez różne stany.
  • Przygotowując alternatywne układy, możesz mieszać i dopasowywać fragmenty w zależności od rozmiaru i orientacji ekranu.
  • Fragmenty mają bezpośredni dostęp do swojej aktywności w kontenerze i mogą dodawać elementy do paska czynności aktywności (omówionego w następnym punkcie).

Aby zarządzać fragmentami w działalności, musisz użyć interfejsu FragmentManager, który udostępnia kilka interfejsów API do interakcji z fragmentami, takich jak znajdowanie fragmentów w działalności i wyjmowanie fragmentów ze stosu, aby przywrócić ich poprzedni stan.

Aby wykonać transakcję, np. dodać lub usunąć fragment, musisz utworzyć FragmentTransaction. Możesz wtedy wywoływać metody, takie jak add() remove() lub replace(). Po zastosowaniu wszystkich zmiany, które chcesz wykonać dla transakcji, musisz wywołać funkcję commit(), a system zastosuje transakcję fragment do aktywność.

Więcej informacji o korzystaniu z fragmentów znajdziesz w dokumentacji dotyczącej fragmentów. Kilka próbki są również dostępne w aplikacji w wersji demonstracyjnej interfejsu API.

Pasek działań

Pasek działań zastępuje tradycyjny pasek tytułu u góry okna aktywności. Zawiera ono logo aplikacji w lewym rogu i nowy interfejs elementów w Menu opcji. Dodatkowo Pasek działań umożliwia:

  • Dodawaj elementy menu bezpośrednio na pasku działań jako „czynności”.

    W deklaracji XML elementu menu dodaj atrybut android:showAsAction o wartości "ifRoom". Jeśli wystarczy miejsca, pojawi się bezpośrednio na pasku działań. W przeciwnym razie element zostanie umieszczony w sekcji rozszerzone menu widoczne po prawej stronie paska działań przy użyciu ikony menu.

  • Zastępowanie działania widżetem (np. polem wyszukiwania) – tworzenie „widok akcji”.

    W deklaracji XML elementu menu dodaj atrybut android:actionViewLayout z zasobem układu lub atrybut android:actionViewClass z nazwą klasy widżetu. (Aby produkt został wyświetlony, musisz również zadeklarować atrybut android:showAsAction na pasku działań). Jeśli na pasku działań jest za mało miejsca, a element jest widoczny w działa jak zwykły element menu i nie wyświetla widżetu.

  • Dodawanie działania do logo aplikacji i zastępowanie go logo niestandardowym

    Logo aplikacji jest automatycznie przypisywane do identyfikatora android.R.id.home, który system przekazuje do wywołania onOptionsItemSelected() aktywności po jego dotknięciu. Wystarczy odpowiedzieć na ten identyfikator w oddzwonieniu do wykonania działania, np. przejścia do folderu głównego aplikacji działania.

    Aby zastąpić ikonę logo, określ logo aplikacji w pliku manifestu za pomocą atrybutu android:logo, a potem wywołaj funkcję setDisplayUseLogoEnabled(true) w swojej aktywności.

  • Dodaj menu nawigacyjne, aby przejść wstecz przez tylny stos fragmentów
  • Dodaj karty lub listę rozwijaną, aby przechodzić między fragmentami
  • Dostosuj pasek działań, dodając motywy i tła

Pasek działań jest standardowy dla wszystkich aplikacji korzystających z nowego holograficznego motywu, także standardowe po ustawieniu wartości android:minSdkVersion lub android:targetSdkVersion na "11".

Więcej informacji o pasku działań znajdziesz w dokumentacji tego paska. Kilka przykładów jest też dostępnych w aplikacji Przykłady użycia interfejsu API.

Schowek systemowy

Aplikacje mogą teraz kopiować i wklejać dane (oprócz zwykłego tekstu) do i z całego systemu schowku. Może to być zwykły tekst, identyfikator URI lub intencja.

Zapewniając systemowi dostęp (za pośrednictwem dostawcy treści) do danych, które użytkownik chce skopiować użytkownik może skopiować z aplikacji złożone treści (na przykład obraz lub strukturę danych) wklej go do innej aplikacji, która obsługuje tego typu zawartość.

Aby zacząć korzystać z Schowka, pobierz globalny obiekt ClipboardManager, wywołując funkcję getSystemService(CLIPBOARD_SERVICE).

Aby skopiować element do schowka, musisz utworzyć nowy obiekt ClipData, który zawiera co najmniej 1 obiekt ClipData.Item z których każdy opisuje jedną encję. Aby utworzyć obiekt ClipData zawierający tylko 1 element ClipData.Item, możesz użyć jednej z metod pomocniczych, takich jak newPlainText(), newUri()newIntent(), które zwracają obiekt ClipData z wstępnie załadowanym elementem ClipData.Item.

Aby dodać element ClipData do schowka, przekaż go do setPrimaryClip() w przypadku instancji ClipboardManager.

Następnie możesz odczytać plik ze schowka (aby go wkleić), wywołując funkcję getPrimaryClip() na elemencie ClipboardManager. Obsługa otrzymanych danych ClipData może być skomplikowana. Zanim spróbujesz je wkleić, musisz się upewnić, że możesz obsługiwać typ danych na komputerze.

W schowku znajduje się tylko jeden element składowych danych (ClipData obiektu), ale jeden element ClipData może zawierać wiele obiektów ClipData.Item.

Więcej informacji znajdziesz w dokumentacji dotyczącej kopiowania i wklejania. Prosty sposób implementacji kopiowania i wklejania znajdziesz również w pokazach demonstracyjnych interfejsów API i bardziej kompleksową implementację znajdziesz w notatniku.

Przeciągnij i upuść

Nowe interfejsy API upraszczają operacje przeciągania i upuszczania w interfejsie aplikacji. Przeciągnięcie to przesłanie jakiegoś rodzaju danych przechowywanych w ClipData – z jednego miejsca do drugiego. Punktem początkowym i końcowym operacji przeciągania jest View, dlatego interfejsy API, które bezpośrednio obsługują operacje przeciągania i upuszczania, w zajęciach View.

Przeciąganie i upuszczanie ma cykl życia, który jest zdefiniowany przez kilka działań – każde z nich zdefiniowane przez obiekt DragEvent, taki jak ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED, ACTION_DROP Każdy widok, który chce uczestniczyć w operacji przeciągania, może nasłuchiwać tych działań.

Aby zacząć przeciągać treści w aktywności, wywołaj startDrag() w View, tworząc obiekt ClipData reprezentujący dane do przeciągnięcia, View.DragShadowBuilder, aby ułatwić „cień” którą użytkownicy widzą pod ich palcami podczas przeciągania, a Object, która umożliwia udostępnianie informacje o przeciąganym obiekcie z widokami, które mogą go otrzymać.

Aby zaakceptować przeciągany obiekt w View (otrzymać „upuszczenie”), zarejestruj widok w OnDragListener, wywołując funkcję setOnDragListener(). Gdy w widoku wystąpi zdarzenie przeciągnięcia, system wywołuje metodę onDrag(), aby uzyskać żądanie OnDragListener, które otrzymuje DragEvent opisujący rodzaj przeciągnięcia (np. ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED i ACTION_DROP). Podczas przeciągania system wielokrotnie wywołuje parametr onDrag(), aby uzyskać widok pod obszarem przeciągania, aby dostarczyć strumieni danych. Widok odbierający może zapytać o typ zdarzenia dostarczanego do onDragEvent(), wywołując funkcję getAction() w komponencie DragEvent.

Uwaga: chociaż zdarzenie przeciągania może zawierać obiekt ClipData, nie jest ono powiązane z systemową skopiowaną zawartością schowka. Przeciąganie i upuszczanie nie powinna nigdy umieszczać przeciągniętych danych w schowku systemowym.

Więcej informacji znajdziesz w sekcji Przeciąganie i Dokumentacja usuwania. Możesz też zobaczyć sposób przeciągania i upuszczania w Aplikacja API Demos i Honeycomb Gallery aplikacji.

Widżety

Android 3.0 obsługuje kilka nowych klas widżetów, które umożliwiają tworzenie bardziej interaktywnych widżetów aplikacji na ekranie głównym użytkownika. Dotyczy to tych klas: GridView, ListView, StackView, ViewFlipperAdapterViewFlipper.

Co ważniejsze, możesz używać nowych funkcji RemoteViewsService do tworzenia widżetów aplikacji z kolekcjami, korzystając z widżetów takich jak GridView, ListViewStackView, które są obsługiwane przez dane zdalne, na przykład od dostawcy treści.

Klasa AppWidgetProviderInfo (zdefiniowana w XML za pomocą elementu <appwidget-provider>) obsługuje też 2 nowe pola: autoAdvanceViewIdpreviewImage. W polu autoAdvanceViewId możesz określić identyfikator widoku podrzędnego widżetu aplikacji, który powinien być automatycznie przewijany przez hosta widżetu aplikacji. Pole previewImage określa podgląd wyglądu widżetu aplikacji i jest wyświetlane użytkownikowi w selektorze widżetów. Jeśli to pole nie jest zostanie użyta ikona widżetu aplikacji.

Aby ułatwić tworzenie podglądu obrazu widżetu aplikacji (który należy podać w polu previewImage), emulator Androida zawiera aplikację „Podgląd widżetu”. Aby utworzyć obraz podglądu, uruchom tę aplikację, wybierz widżet aplikacji i skonfiguruj go tak, jak chcesz, aby wyglądał obraz podglądu, a potem zapisz go i umieść w zasobach rysowalnych aplikacji.

Nowe funkcje widżetu aplikacji możesz zobaczyć w aplikacji widżet StackView i widżecie lista pogody.

Powiadomienia na pasku stanu

Interfejsy API Notification zostały rozszerzone o obsługę treści bogatych w treści powiadomień na pasku powiadomień, a dodatkowo nowa klasa w Notification.Builder ułatwiają Utwórz Notification obiekty.

Nowe funkcje:

  • Obsługa dużej ikony w powiadomieniu (setLargeIcon()). Zwykle jest to spowodowane aplikacji społecznościowych do pokazywania zdjęcia osoby, która jest źródłem powiadomienia lub w aplikacjach do multimediów, by wyświetlić miniaturę albumu.
  • Obsługa układów niestandardowych na pasku stanu paska stanu przy użyciu funkcji setTicker().
  • Obsługa niestandardowych układów powiadomień, w tym przycisków z elementami PendingIntent, które zapewniają bardziej interaktywne widżety. Na przykład plik może sterować odtwarzaniem muzyki bez rozpoczynania aktywności.

Moduły wczytywania treści

Nowe interfejsy API frameworku ułatwiają asynchroniczne wczytywanie danych za pomocą klasy Loader. Możesz go używać w połączeniu ze składnikami interfejsu użytkownika, takimi jak widoki i fragmenty, aby dynamicznie wczytywać dane z wątków roboczych. Podklasa CursorLoader została specjalnie zaprojektowana, aby ułatwić Ci to w przypadku danych obsługiwanych przez klasę ContentProvider.

Wystarczy, że zaimplementujesz interfejs LoaderCallbacks, aby otrzymywać wywołania zwrotne, gdy zostanie przesłane żądanie utworzenia nowego ładowarki lub gdy zmienią się dane, a potem wywołaj initLoader(), aby zainicjować ładowarkę dla swojej aktywności lub fragmentu.

Więcej informacji znajdziesz w dokumentacji modułów wczytujących. Możesz też zobaczyć przykładowy kod z wykorzystaniem funkcji wczytujących w klasie LoaderCursor i Przykłady z narzędzia LoaderThrottle.

Interfejsy API Bluetooth A2DP i zestawu słuchawkowego

Android zawiera teraz interfejsy API, które umożliwiają aplikacjom sprawdzanie stanu połączonych urządzeń z profilem A2DP i słuchawek Bluetooth. Aplikacje mogą na przykład wykrywać, czy zestaw słuchawkowy Bluetooth jest podłączone do słuchania muzyki i odpowiednio powiadomić użytkownika. Aplikacje mogą również otrzymywać przesyła komunikaty AT dotyczące konkretnego dostawcy i powiadamia użytkownika o stanie połączenia urządzenia, np. gdy poziom baterii w podłączonym urządzeniu jest słaba.

Możesz zainicjować odpowiednią funkcję BluetoothProfile, wywołując funkcję getProfileProxy() z konstantem profilem A2DP lub HEADSET oraz BluetoothProfile.ServiceListener, aby otrzymywać wywołania zwrotne, gdy klient Bluetooth jest połączony lub rozłączony.

Schemat animacji

Zupełnie nowa elastyczna platforma animacji umożliwia animowanie dowolnych właściwości dowolnego obiektu (Widok, rysowalny, Fragment, Obiekt lub cokolwiek innego). Umożliwia on zdefiniowanie kilku aspektów animację, na przykład:

  • Czas działania
  • Powtarzająca się kwota i zachowanie
  • Typ interpolacji czasowej
  • Animator ustawia odtwarzanie animacji razem, po kolei lub po określonych opóźnieniach.
  • Opóźnienie odświeżania klatki

Te i inne aspekty animacji możesz zdefiniować domyślnie w przypadku wartości int, float i hexadecimalnych wartości kolorów obiektu. Oznacza to, że gdy obiekt ma pole właściwości dla jednego z tych typów, może zmienić jego wartość z czasem i w ten sposób wpłynąć na animację. Aby animować jakikolwiek inny typ wartości, system obliczania wartości dla danego typu za pomocą interfejsu TypeEvaluator.

Do animowania wartości właściwości są 2 animatory: ValueAnimator i ObjectAnimator. ValueAnimator oblicza wartości animacji, ale nie wie, który obiekt lub która właściwość jest animowany. Wykonuje tylko obliczenia, a Ty nasłuchuj aktualizacji i przetwarzaj dane według własnej logiki. ObjectAnimator jest podklasą klasy ValueAnimator i pozwala ustawić animację obiektu i właściwości oraz obsługiwać całą animację. Oznacza to, że nadajesz ObjectAnimator obiektowi animacji, właściwości obiektu, które zmieniają się z czasem, oraz zbioru wartości, które mają być stosowane do tej właściwości i rozpoczyna animację.

Dodatkowo klasa LayoutTransition umożliwia automatyczne stosowanie animacji przejść w przypadku zmian w układzie aktywności. Aby włączyć przejścia dla części układ, utwórz obiekt LayoutTransition i włącz go dowolne ViewGroup, wywołując setLayoutTransition(). Powoduje to, że wartość domyślna animacje są uruchamiane po dodaniu elementów do grupy lub ich usunięciu. Aby określić niestandardowy animacje, wywołaj setAnimator() w LayoutTransition i podaj niestandardowy Animator, na przykład ValueAnimator lub ObjectAnimator omówiono powyżej.

Więcej informacji znajdziesz w dokumentacji dotyczącej animacji właściwości. Dostępne opcje zapoznaj się też z kilkoma przykładami interfejsów API animacji w interfejsie API aplikacji demonstracyjnej.

Rozszerzony interfejs użytkownika

  • Wybór z użyciem siatki w ListView i GridView

    Nowy tryb CHOICE_MODE_MULTIPLE_MODAL w usłudze setChoiceMode() umożliwia użytkownikom wybranie wielu elementów z: ListView lub GridView. W połączeniu z paskiem działań użytkownicy mogą wybierać wiele elementów, a potem wybierać działanie do wykonania z listy opcji na pasku działań (który przekształca się w tryb działania z wielokrotnie wybieranymi opcjami).

    Aby włączyć wybór wielokrotny, zadzwoń pod numer setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) i zarejestruj MultiChoiceModeListener w setMultiChoiceModeListener().

    Gdy użytkownik przytrzyma dłużej element, pasek działań przełączy się na tryb wielokrotnego wyboru Tryb działania. System powiadamia MultiChoiceModeListener o wybraniu elementów, wywołując metodę onItemCheckedStateChanged().

    Przykłady wyboru jednokrotnego wyboru znajdziesz na liście15. kawa w przykładowej aplikacji interfejsu API w wersji demonstracyjnej.

  • Nowe interfejsy API do przekształcania widoków

    Nowe interfejsy API umożliwiają łatwe stosowanie przekształceń 2D i 3D do widoków w schemacie aktywności. Tworzenie nowych przekształceń jest możliwe dzięki zbiorowi właściwości obiektów, które definiują pozycję układu, orientację, przezroczystość i nie tylko.

    Nowe metody konfigurowania właściwości widoku to m.in. setAlpha(), setBottom(), setLeft(), setRight(), setBottom(), setPivotX(), setPivotY(), setRotationX(), setRotationY(), setScaleX(), setScaleY(), setAlpha().

    Niektóre metody mają też odpowiedni atrybut XML, który możesz określić w pliku układu, aby zastosować domyślną transformację. Dostępne atrybuty: translationX, translationY, rotation, rotationX, rotationY, scaleX, scaleY, transformPivotX, transformPivotY i alpha.

    Użycie niektórych z tych nowych właściwości widoku w połączeniu z nową strukturą animacji (opis powyżej), możesz łatwo dodać do widoków fantazyjne animacje. Na przykład, aby obrócić na swojej osi Y, dodaj do elementu ObjectAnimator element View, wartość „obrótY” oraz wartości początkowej i końcowej:

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
  • Nowe motywy holograficzne

    Standardowe widżety systemowe i ogólny wygląd zostały przeprojektowane i zawierają nowy motyw interfejsu użytkownika oparty na „holografii”. System stosuje nowy motyw, korzystając ze standardowego systemu stylów i motywów.

    Każda aplikacja kierowana na platformę Android 3.0, która ma ustawioną wartość android:minSdkVersion lub android:targetSdkVersion równa "11", dziedziczy domyślnie motyw holograficzny. Jeśli jednak aplikacja ma też swój własny motyw, zastąpi on motyw holograficzny, chyba że zaktualizujesz style, aby dziedziczyły motyw holograficzny.

    Aby zastosować motyw holograficzny do poszczególnych aktywności lub odziedziczyć je we własnym motywie definicje, użyj jednej z kilku nowych Theme.Holo tematy. Jeśli aplikacja jest zgodna z wersją Androida niższą niż 3.0 i zawiera motywy niestandardowe, wybierz motyw na podstawie wersji platformy.

  • Nowe widżety
    • AdapterViewAnimator

      Klasa podstawowa dla AdapterView, która wykonuje animacje podczas przełączania się między widokami.

    • AdapterViewFlipper

      Prosty ViewAnimator, który animuje przejścia między co najmniej 2 widokami dodanymi do niego. W danym momencie wyświetlany jest tylko jeden element podrzędny. W razie potrzeby może automatycznie się odwrócić pomiędzy dla każdego elementu podrzędnego w regularnych odstępach.

    • CalendarView

      Umożliwia użytkownikom wybieranie dat z kalendarza przez dotknięcie daty oraz przewijanie lub przesuwanie kalendarza do wybranej daty. Możesz skonfigurować zakres dat dostępny w widżecie.

    • ListPopupWindow

      Przypina się do widoku hosta i wyświetla listę opcji, na przykład listę sugestii podczas wpisywania tekstu w widoku EditText.

    • NumberPicker

      Pozwala użytkownikowi wybrać numer z wstępnie zdefiniowanego zakresu. Widżet podaje dane wejściowe oraz za pomocą przycisków w górę i w dół, aby wybrać cyfrę. Dotknięcie pola wejściowego umożliwia użytkownikowi przewijanie wartości lub ponowne dotknięcie, aby bezpośrednio edytować bieżącą wartość. Umożliwia też pozycje na ciągi, dzięki czemu zamiast indeksu wyświetla się odpowiedni ciąg pozycji.

    • PopupMenu

      Wyświetla Menu w wyskakującym okienku modalnym zakotwiczonym w widoku. pojawi się wyskakujące okienko pod widokiem zakotwiczonym, jeśli jest tam miejsce, lub nad nim, jeśli go nie ma. Jeśli edytor IME (miękki) klawiatury) jest widoczne, wyskakujące okienko nie nakłada się na edytor IME, dopóki użytkownik nie dotknie .

    • SearchView

      Udostępnia pole wyszukiwania, które można skonfigurować tak, aby zapytania były wyświetlane w określonej grupie aktywność i wyświetlanie sugestii wyszukiwania (w taki sam sposób, jak w przypadku tradycyjnego okna wyszukiwania). Ten widżet jest szczególnie przydatny do udostępniania widżetu wyszukiwania na pasku działań. Więcej informacji znajdziesz w artykule Tworzenie interfejsu wyszukiwania.

    • StackView

      Widok, który wyświetla elementy podrzędne w postaci stosu 3D i pozwala użytkownikom przełączać się między widokami jak w rolce.

Grafika

  • Sprzętowa akceleracja grafiki 2D

    Teraz możesz włączyć dla swojej aplikacji renderowanie OpenGL, ustawiając wartość android:hardwareAccelerated="true" w elemencie <application> w pliku manifestu lub w przypadku poszczególnych elementów <activity>.

    Ta flaga pomaga aplikacjom, ponieważ przyspiesza ich rysowanie. Dzięki temu animacje będą płynniejsze, przewijanie płynniejsze, a ogólna wydajność i reakcje na interakcje użytkowników będą lepsze.

  • Pomoc dotycząca sprzętu i oprogramowania

    Domyślnie View nie ma określonej warstwy. Możesz określić, że parametr może być wspierany przez warstwę sprzętową lub programową, określoną za pomocą wartości LAYER_TYPE_HARDWARE i LAYER_TYPE_SOFTWARE, przy użyciu setLayerType() lub layerType .

    Warstwa sprzętowa jest obsługiwana przez specyficzną dla sprzętu teksturę (zwykle obiekty Frame Buffer lub FBO na sprzęcie OpenGL) i powoduje, że widok jest renderowany za pomocą ścieżki sprzętowego renderowania Androida, ale tylko wtedy, gdy akceleracja sprzętowa jest włączona dla hierarchii widoku. Gdy sprzęt akceleracja jest wyłączona, warstwy sprzętowe zachowują się dokładnie tak samo jak warstwy oprogramowania.

    Warstwa programowa jest obsługiwana przez mapę bitową i powoduje, że widok jest renderowany za pomocą ścieżki renderowania programowego Androida, nawet jeśli akceleracja sprzętowa jest włączona. Warstwy oprogramowania powinny być w przypadku częstej aktualizacji drzewa widoku, którego dotyczy problem. Każda aktualizacja wymaga ponownego renderowania warstwy oprogramowania, która może być wolna.

    Więcej informacji znajdziesz w dokumentacji LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE.

  • Silnik graficzny 3D Renderscript

    Renderscript to środowisko wykonawcze 3D, które udostępnia zarówno interfejs API do tworzenia scen 3D, jako specjalny, niezależny od platformy język do cieniowania, który zapewnia maksymalną wydajność. Dzięki Renderscript może przyspieszyć przetwarzanie danych i obsługę grafiki. Renderowanie to idealny sposób wysokiej jakości efekty 3D w aplikacjach, tapetach, karuzelach i nie tylko.

    Więcej informacji znajdziesz w artykule Renderowanie i obliczenia 3D z użyciem funkcji Renderscript.

Multimedia

  • Film poklatkowy

    Interfejsy API kamery obsługują teraz nagrywanie filmów poklatkowych. setCaptureRate() określa liczbę klatek, ujęć.

  • Obsługa tekstur w strumieniach obrazów

    Nowa funkcja SurfaceTexture umożliwia przechwytywanie strumienia obrazu jako tekstury OpenGL ES. Wywołując funkcję setPreviewTexture() w przypadku instancji Camera, możesz określić SurfaceTexture, na którym ma być wyświetlany odtwarzany film lub podgląd klatek z kamery.

  • Transmisja na żywo przez HTTP

    Aplikacje mogą teraz przekazywać adres URL playlisty M3U do frameworku multimedialnego, aby rozpocząć sesję HTTP Live. Platforma mediów obsługuje większość specyfikacji HTTP Live Streaming, w tym adaptacyjną szybkość transmisji bitów. Zapoznaj się z dokumentem Obsługiwane formaty multimediów: znajdziesz więcej informacji.

  • dane EXIF

    ExifInterface zawiera nowe pola przysłony, ISO i ekspozycji obecnie się znajdujesz.

  • Profile kamery

    Nowa metoda hasProfile() i kilka filmów profile jakości (takie jak QUALITY_1080P, QUALITY_720P, QUALITY_CIF i inne) umożliwiają określenie, opcje jakości.

  • Przekazywanie plików multimedialnych w formie cyfrowej

    Platforma zawiera wbudowane wsparcie dla protokołu MTP/PTP przez USB, co pozwala użytkownikom łatwo przesyłać dowolne typy plików multimedialnych między urządzeniami i na komputer hosta. Programiści mogą tworzyć aplikacje, które umożliwiają użytkownikom tworzenie plików multimedialnych lub zarządzanie nimi, a także ich przenoszenie i udostępnianie na różnych urządzeniach.

  • Zarządzanie prawami cyfrowymi (DRM)

    Nowa platforma Rozszerzonego zarządzania prawami cyfrowymi (DRM) do sprawdzania i egzekwowania zasad dotyczących treści cyfrowych prawa autorskie. Jest ona implementowana na 2 poziomach architektury:

    • Interfejs API platformy DRM, który jest udostępniany aplikacjom i działa przez maszynę wirtualną Dalvik w przypadku aplikacji standardowych.
    • Menedżer DRM kodu natywnego, który implementuje interfejs API platformy i udostępnia interfejs dla DRM wtyczki do zarządzania prawami i odszyfrowywania w różnych schematach DRM.

    Deweloperom aplikacji platforma oferuje abstrakcyjny, ujednolicony interfejs API, który upraszcza zarządzanie chronionymi treściami. Interfejs API ukrywa złożoność operacji DRM i umożliwia spójny tryb działania w przypadku treści chronionych i niechronionych oraz różnych zabezpieczeń DRM przedsięwzięcia.

    W przypadku producentów urządzeń, właścicieli treści i dostawców internetowych multimediów cyfrowych DRM API wtyczki platformy udostępnia sposób dodawania obsługi wybranego schematu DRM do System Android do bezpiecznego egzekwowania ochrony treści.

    Wersja testowa nie zawiera żadnych natywnych wtyczek DRM, które umożliwiają sprawdzanie i egzekwowanie zabezpieczeń cyfrowych prawa autorskie. Producenci urządzeń mogą jednak wysyłać do nich wtyczki DRM.

    Wszystkie interfejsy DRM znajdziesz w pakiecie android.drm.

Pomoc dotycząca klawiatury

  • Obsługa modyfikatorów Control, Meta, Caps Lock, Num Lock i Scroll Lock. Więcej informacji znajdziesz w polu META_CTRL_ON i powiązanych polach.
  • Obsługa klawiatur w pełni typowych dla pulpitu, w tym obsługa klawiszy takich jak Escape, Home, End, Usuń lub inne. Aby określić, czy zdarzenia klawiaturowe pochodzą z pełnej klawiatury, możesz wysłać zapytanie getKeyboardType() i sprawdzić, czy występuje w nim wartość KeyCharacterMap.FULL.
  • TextView obsługuje teraz wycinanie, kopiowanie, wklejanie i zaznaczanie wszystkich za pomocą kombinacji klawiszy Ctrl + X, Ctrl + C, Ctrl + V i Ctrl + A. Obsługuje również PageUp/PageDown, Home/End oraz zaznaczanie tekstu przy użyciu klawiatury.
  • KeyEvent dodaje kilka nowych metod, aby ułatwić sprawdzanie klucza stan modyfikatora. Zobacz hasModifiers(int), hasNoModifiers(), metaStateHasModifiers(), metaStateHasNoModifiers().
  • Aplikacje mogą implementować niestandardowe skróty klawiszowe przez podklasyfikację Activity, Dialog lub View i zaimplementowanie onKeyShortcut() Platforma wywołuje tę metodę za każdym razem, gdy klawisz jest połączony z klawiszem Ctrl. Podczas tworzenia menu Opcje możesz zarejestrować skróty klawiszowe, ustawiając atrybut android:alphabeticShortcut lub android:numericShortcut dla każdego elementu <item> (lub za pomocą setShortcut()).
  • Android 3.0 obejmuje nową „klawiaturę wirtualną” urządzenie o identyfikatorze KeyCharacterMap.VIRTUAL_KEYBOARD. Wirtualna klawiatura ma mapę klawiszy USA w stylu komputerowym, co przydaje się do syntetyzowania kluczowych zdarzeń na potrzeby testowania dane wejściowe.

Zdarzenia podzielonego dotyku

Wcześniej tylko 1 widok mógł przyjmować zdarzenia dotykowe w danym momencie. Android 3.0 umożliwia dzielenie zdarzeń dotykowych na widoki, a nawet okna, dzięki czemu różne widoki mogą przyjmować jednoczesne zdarzenia dotykowe.

Dzielenie zdarzeń dotknięcia jest domyślnie włączone, gdy aplikacja kieruje reklamy Android 3.0 Oznacza to, że aplikacja ustawiła wartość atrybutu android:minSdkVersion lub android:targetSdkVersion na "11".

Jednak te właściwości umożliwiają wyłączenie zdarzeń dotyku podzielonego w przypadku widoków w konkretnych grupach widoków i w różnych oknach.

  • Atrybut android:splitMotionEvents grup widoków danych umożliwia wyłączenie zdarzeń podziału dotknięcia w układzie między widokami podrzędnymi. Na przykład:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>

    W ten sposób widoki podrzędne w układzie liniowym nie mogą dzielić zdarzeń dotyku – w danym momencie tylko jeden widok może otrzymywać zdarzenia dotyku.

  • Właściwość stylu android:windowEnableSplitTouch pozwala wyłączyć dzielenie zdarzeń dotknięć między oknami przez zastosowanie go do motywu aktywności lub całą aplikację. Na przykład:
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>

    Gdy zastosujesz ten motyw do <activity> lub <application>, akceptowane są tylko zdarzenia dotknięcia w bieżącym oknie aktywności. Jeśli na przykład wyłączysz dzielone zdarzenia dotykowe w różnych oknach, pasek systemowy nie będzie mógł odbierać zdarzeń dotykowych w tym samym czasie co aktywność. Nie ma to wpływu na to, czy widoki w ramach aktywności mogą dzielić zdarzenia dotykowe – domyślnie aktywność może nadal dzielić zdarzenia dotykowe na widoki.

    Więcej informacji na temat tworzenia motywu znajdziesz w artykule Stosowanie stylów i motywów.

WebKit

  • Nowa klasa WebViewFragment do utworzenia fragmentu złożonego z WebView
  • Nowe metody WebSettings:
    • setDisplayZoomControls() umożliwia ukrycie elementy sterujące powiększeniem ekranu, a jednocześnie pozwalają użytkownikowi na powiększanie za pomocą gestów palcami (należy ustawić setBuiltInZoomControls()) true).
    • Nowa metoda WebSettings, setEnableSmoothTransition(), umożliwia aby uzyskać płynne przejścia podczas przesuwania i powiększania. Po włączeniu WebView wybierze rozwiązanie, które zmaksymalizuje wydajność (np. zawartość WebView może się nie aktualizować podczas przejścia).
  • Nowe metody WebView:
    • onPause() oddzwonienie, aby wstrzymać przetwarzanie powiązane z komponentem WebView, gdy jest on ukryty. Jest to przydatne, aby zmniejszyć niepotrzebne wykorzystanie procesora lub ruchu sieciowego, gdy komponent WebView nie jest na pierwszym planie.
    • wywołanie zwrotne onResume(), aby wznowić przetwarzanie związane z WebView, które zostało wstrzymane podczas onPause().
    • saveWebArchive() umożliwia zapisanie jako archiwum internetowe.
    • showFindDialog() rozpoczyna wyszukiwanie tekstowe w języku: w bieżącym widoku.

Przeglądarka

Do aplikacji Przeglądarka dodawane są następujące funkcje obsługujące aplikacje internetowe:

  • Rejestrowanie multimediów

    Zgodnie z definicją podaną w dokumencie HTML Media Capture , przeglądarka umożliwia aplikacjom internetowym dostęp do dźwięku, obrazów i wideo możliwości urządzenia. Na przykład ten kod HTML zawiera dane wejściowe, które użytkownik może zrób zdjęcie do przesłania:

    <input type="file" accept="image/*;capture=camera" />

    Jeśli parametr capture=camera zostanie wykluczony, użytkownik będzie mógł zrobić nowe zdjęcie aparatem lub wybrać je z urządzenia (np. z aplikacji Galeria).

  • Orientacja urządzenia

    Zgodnie ze specyfikacją Zdarzenia orientacji urządzenia przeglądarka umożliwia aplikacjom internetowym odsłuchiwanie zdarzeń DOM, które dostarczają informacji o fizycznej orientacji i ruchu urządzenia.

    Orientacja urządzenia jest wyrażona za pomocą osi x, y i z, wyrażonej w stopniach, a ruch jest wyrażony danymi o przyspieszeniu i szybkości obrotu. Strona internetowa może rejestrować zdarzenia orientacji, wywołując zdarzenie window.addEventListener z typem zdarzenia "deviceorientation", oraz zdarzenia ruchu, rejestrując zdarzenie typu "devicemotion".

  • Przekształcenia 3D w CSS

    Zgodnie ze specyfikacją Modułu transformacji 3D w kodzie CSS przeglądarka umożliwia przekształcanie elementów renderowanych przez kod CSS w 3 wymiarach.

Narzędzia do obsługi plików JSON

Nowe zajęcia, JsonReader i JsonWriter, przydadzą Ci się odczytu i zapisu strumieni JSON. Nowe interfejsy API uzupełniają klasy org.json, które wykonują działania dokumentu w pamięci.

Możesz utworzyć instancję usługi JsonReader, wywołując jej konstruktora i przekazując InputStreamReader, który dostarcza ciąg znaków JSON. Następnie zacznij odczytywać obiekt, wywołując funkcję beginObject(), odczytując nazwa klucza z nextName(), odczytaj wartość za pomocą metod odpowiednio do typu, na przykład nextString() i nextInt(), i kontynuuj, gdy hasNext() ma wartość prawda.

Możesz utworzyć instancję JsonWriter, wywołując jej konstruktor i przekazując odpowiednią wartość OutputStreamWriter. Następnie zapisz dane JSON w sposób podobny do czytnika, używając elementu name() do dodania nazwy właściwości i odpowiedniej metody value() do dodania odpowiedniej wartości.

Te klasy są domyślnie rygorystyczne. Metoda setLenient() w każdej klasie powoduje, że są one bardziej liberalne w tym, co akceptują. Ten tryb analizy z łatwością jest też zgodny z domyślnym parsowaniem w org.json.

Nowe stałe funkcji

<uses-feature> Element manfest powinien być używany do informowania podmiotów zewnętrznych (takich jak Google Play) o zestawie funkcje sprzętu i oprogramowania, od których zależy działanie aplikacji. W tej wersji Android dodaje następujące nowe stałe, które aplikacje mogą zadeklarować za pomocą tego elementu:

  • "android.hardware.faketouch"

    Gdy zadeklarujesz, że aplikacja jest zgodna z urządzeniem, które oferuje z emulacją ekranu dotykowego (lub lepszego). Urządzenie z emulowanym ekranem dotykowym udostępnia użytkownikowi dane wejściowe system, który może emulować podzbiór ekranu dotykowego funkcje zabezpieczeń. Przykładem takiego systemu wejściowego jest mysz lub pilot, który kursor na ekranie. Takie systemy wprowadzania danych obsługują proste zdarzenia dotykowe, takie jak kliknięcie w dół, kliknięcie w górę i przeciągnięcie. Jednak w przypadku bardziej skomplikowanych typów wprowadzania (np. gestami, ulotkami itp.) może być trudniejsze lub bardziej niemożliwe na fałszywych urządzeniach dotykowych (a gesty wielodotykowe na pewno nie są możliwe).

    Jeśli Twoja aplikacja nie wymaga skomplikowanych gestów i nie chcesz, aby była odfiltrowywana na urządzeniach z emulowanym ekranem dotykowym, powinnaś zadeklarować "android.hardware.faketouch" za pomocą elementu <uses-feature>. Dzięki temu Twoja aplikacja będzie dostępna dla największej liczby typów urządzeń, także tych, które obsługują tylko emulowane funkcje wejściowe z ekranu dotykowego.

    Wszystkie urządzenia z ekranem dotykowym obsługują również "android.hardware.faketouch", ponieważ funkcje ekranu dotykowego to nadzwyczajny zestaw funkcji związanych z fałszywym dotykiem. Jeśli więc nie potrzebujesz ekranu dotykowego, dodaj element <uses-feature> do obsługi fałszywego dotyku.

Nowe uprawnienia

  • "android.permission.BIND_REMOTEVIEWS"

    W przypadku implementacji RemoteViewsService musisz zadeklarować to uprawnienie jako wymagane w elementach pliku manifestu <service>. Na przykład, gdy utworzysz widżet aplikacji, który za pomocą RemoteViewsService będzie wypełniać kolekcja, wpis w pliku manifestu może wyglądać tak:

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />

Nowe technologie platformy

  • Miejsce na dane
    • Obsługa systemu plików ext4 w celu włączenia pamięci eMMC.
    • System plików FUSE do obsługi urządzeń MTP.
    • obsługa trybu hosta USB do obsługi klawiatur i hubów USB;
    • Obsługa MTP/PTP
  • Jądro systemu Linux
    • Uaktualniono do wersji 2.6.36
  • Maszyna wirtualna Dalvik
    • Nowy kod do obsługi i optymalizacji pod kątem platformy SMP
    • Różne ulepszenia infrastruktury JIT
    • Ulepszenia dotyczące zbierania elementów:
      • Dostrojone pod kątem SMP
      • Obsługa większych rozmiarów sterty
      • Ujednolicona obsługa map bitowych i buforów bajtów
  • Biblioteki podstawowe Dalvik
    • nowa, znacznie szybsza implementacja NIO (nowoczesnej biblioteki we/wy),
    • Ulepszone komunikaty o wyjątkach
    • Poprawki dotyczące poprawności i wydajności

Raport o różnicach w interfejsie API

Szczegółowy widok wszystkich zmian interfejsu API w Androidzie 3.0 (poziom API 11), zapoznaj się z raportem na temat różnic w interfejsach API.

Poziom API

Platforma Android 3.0 udostępnia zaktualizowaną wersję platformy API. Interfejs API Androida 3.0 ma przypisany identyfikator liczbowy 11, który jest przechowywany w systemie. Ten identyfikator, zwany „poziomem interfejsu API”, umożliwia systemowi prawidłowe określenie, czy aplikacja jest zgodna z systemem, zanim zostanie zainstalowana.

Aby skorzystać z interfejsów API wprowadzonych w Androidzie 3.0 w aplikacji, musisz skompilować aplikację zgodnie z biblioteką Androida w bibliotece platformę SDK Androida 3.0, W zależności od potrzeb trzeba też dodać android:minSdkVersion="11" do elementu <uses-sdk> w nagłówku aplikacji pliku manifestu. Jeśli Twoja aplikacja została zaprojektowana do działania tylko na Androidzie 2.3 lub nowszym, zadeklarowanie tego atrybutu uniemożliwia wcześniejsze zainstalowanie aplikacji do obsługi różnych wersji platformy.

Więcej informacji znajdziesz w artykule Co to jest interfejs API Poziom?