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 pod kątem Androida 3.0, użyj Menedżera pakietów Android SDK, aby pobrać platformę do pakietu SDK.

Omówienie interfejsu API

Poniższe sekcje zawierają omówienie techniczne nowości dla programistów w Androidzie 3.0, , w tym o nowych funkcjach i zmianach w platformie 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 kodu, musisz rozszerzyć klasę Fragment i zaimplementować kilka cykli życia metod wywołania zwrotnego, podobnych do metody Activity. Następnie możesz połączyć kilka z fragmentami w ramach pojedynczej aktywności, aby utworzyć interfejs z kilkoma panelami, w którym każdy panel zarządza własnym cyklem życia i danymi wejściowymi użytkownika.

Możesz też użyć fragmentu bez podawania interfejsu użytkownika, a zamiast tego użyć go jako instancji roboczej dla danej aktywności, np. do zarządzania postępem pobierania, który ma miejsce tylko wtedy, jest w toku.

Dodatkowo:

  • Fragmenty są niezależne i można ich używać ponownie w wielu działaniach
  • Możesz dodawać, usuwać, zastępować i animować fragmenty w aktywności
  • Możesz dodać fragmenty do stosu zarządzanego przez aktywność, zachowując stan Fragmenty, które się zmieniają, pozwalają użytkownikowi przejść wstecz stany
  • Po podaniu alternatywnych układów, można mieszać i dopasowywać fragmenty, rozmiaru i orientacji ekranu.
  • Fragmenty mają bezpośredni dostęp do aktywności w kontenerze i mogą dodawać elementy do Pasek działań aktywności (omówione dalej)

Aby zarządzać fragmentami w swojej aktywności, musisz używać interfejsu FragmentManager, który udostępnia kilka interfejsów API do interakcji z fragmentami, takich jak Dotyczy to znajdowania fragmentów w aktywności i wyrywania fragmentów z tyłu, aby przywrócić poprzedniego stanu.

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 kodu 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. W lewym rogu znajduje się logo aplikacji, a dodatkowo dostępny jest nowy interfejs dla elementów menu Opcje. Dodatkowo Pasek działań umożliwia:

  • Pozycje menu możesz dodawać bezpośrednio na pasku działań jako „działania”.

    W deklaracji XML dotyczącej pozycji menu umieść 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 pozycji menu dodaj atrybut android:actionViewLayout z zasobem szablonu lub atrybutem android:actionViewClass o nazwie klasy widżet. (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

    Do logo aplikacji jest automatycznie przypisywany identyfikator android.R.id.home. które system dostarcza do wywołania zwrotnego onOptionsItemSelected() Twojej aktywności po 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, w pliku manifestu podaj logo aplikacji za pomocą atrybutu android:logo a następnie wywołaj setDisplayUseLogoEnabled(true) w 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 próbki są również dostępne w aplikacji w wersji demonstracyjnej 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ć ze schowka, pobierz globalny obiekt ClipboardManager , dzwoniąc pod numer 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ę. Tworzenie obiektu ClipData zawierających tylko jeden element ClipData.Item, możesz użyć jednej z metod pomocniczych, takich jak newPlainText(), newUri() i newIntent(), które zwracają obiekt ClipData wstępnie załadowany ClipData.Item.

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

Następnie możesz odczytać plik ze schowka (aby go wkleić), wywołając getPrimaryClip() w ClipboardManager. Odpowiedź na ClipData to: być skomplikowane i wymagać pewności, że poradzi sobie z obsługą typu danych w schowku przed wklejeniem.

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 sekcji Kopia i wklej dokumentację. 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 użytkownika 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 wziąć udział w przeciąganiu 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ąganie obiektu w View (otrzymać „upuszczanie”), zarejestruj widok o wartości OnDragListener, dzwoniąc do: 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 odbierania może pobierać typ zdarzenia dostarczany do onDragEvent() przez wywołanie getAction() w DragEvent.

Uwaga: chociaż zdarzenie przeciągania może zawierać obiekt ClipData, nie jest to związane ze schowkiem systemowym. 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 zapewniających użytkownikom bardziej interaktywne widżety aplikacji Ekran główny, w tym: GridView, ListView, StackView, ViewFlipper i AdapterViewFlipper.

Co ważniejsze, możesz używać nowej usługi RemoteViewsService do tworzenia aplikacji widżety z kolekcjami, korzystające z takich widżetów jak GridView, ListView i StackView, które bazują na danych zdalnych, np. od dostawcy treści.

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

Aby ułatwić utworzenie obrazu podglądu widżetu aplikacji (określony w polu previewImage), emulator Androida zawiera komponent o nazwie „Widget Preview”. Aby utworzyć obraz podglądu, uruchom tę aplikację, wybierz widżet aplikacji i skonfiguruj sposób wyświetlania obrazu podglądu, a następnie zapisz zmiany. i umieścić go w rysowalnych zasobach aplikacji.

Implementację nowych funkcji widżetów aplikacji możesz zobaczyć w widżecie aplikacji StackView i widżecie listy pogody aplikacji.

Powiadomienia na pasku stanu

Rozszerzyliśmy interfejsy API Notification, aby obsługiwały większą ilość treści na pasku powiadomień, a dzięki nowej klasie Notification.Builder możesz łatwo 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 platformy ułatwiają asynchroniczne ładowanie danych za pomocą klasy Loader. Można go używać w połączeniu z komponentami interfejsu, takimi jak widoki fragmenty kodu, aby dynamicznie wczytywać dane z wątków instancji roboczych. Podklasa CursorLoader została specjalnie zaprojektowana, aby Ci w tym pomóc w przypadku danych opartych na ContentProvider.

Wystarczy, że zaimplementujesz interfejs LoaderCallbacks, aby odbierać wywołania zwrotne po przesłaniu żądania nowego programu wczytującego lub gdy dane zostały został zmieniony, a następnie wywołaj initLoader(), aby zainicjować program ładujący z Twoją aktywnością lub fragmentem.

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 dla aplikacji do weryfikowania stanu połączonych interfejsów Bluetooth A2DP urządzenia z profilem zestawu słuchawkowego. 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ć odpowiednie BluetoothProfile, wywołując funkcję getProfileProxy() przy użyciu A2DP lub HEADSET stałą profilu i BluetoothProfile.ServiceListener, aby odebrać gdy klient Bluetooth jest podłą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
  • Powtórz ilość i sposób działania
  • Typ interpolacji czasowej
  • Animator ustawia odtwarzanie animacji razem, po kolei lub po określonych opóźnieniach.
  • Opóźnienie odświeżania klatki

Możesz zdefiniować te i inne aspekty animacji dla liczb całkowitych, zmiennoprzecinkowych i szesnastkowych obiektu kolorów. 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 zna konkretnej animowany obiekt lub właściwość. 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ę w czasie, oraz zbioru wartości, które mają być stosowane do tej właściwości i rozpoczyna animację.

Dodatkowo klasa LayoutTransition włącza automatyczne przenoszenie. animacje związane ze zmianami, które wprowadzasz 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 Animacji właściwości. Dostępne opcje zapoznaj się też z kilkoma przykładami interfejsów API animacji w interfejsie API aplikacji demonstracyjnej.

Rozszerzona platforma UI

  • Wybór jednokrotnego wyboru w widokach 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. Zastosowanie w połączeniu z paskiem działań użytkownicy mogą wybrać wiele elementów, a następnie wybrać opcję z listy na pasku działań (która została przekształcona w Wielokrotny wybór, Tryb działania).

    Aby włączyć wybór jednokrotnego wyboru, zadzwoń pod numer setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) i zarejestruj MultiChoiceModeListener z: 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 ułatwiają stosowanie przekształceń 2D i 3D do widoków w Twojej aktywności układ. 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 układzie , aby zastosować domyślne przekształcenie. 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 systemu i jego ogólny wygląd zostały zmienione i uwzględniają nowy „holograficzny” motyw interfejsu. System zastosuje nowy motyw za pomocą standardowego systemu stylów i motywów.

    W przypadku każdej aplikacji kierowanej na platformę Android 3.0 – ustaw android:minSdkVersion lub android:targetSdkVersion do "11" – domyślnie dziedziczy motyw holograficzny. Jeśli jednak aplikacja ma również własny motyw, zastąpi on motyw motyw holograficzny, chyba że zaktualizujesz style, aby go odziedziczyć.

    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 starszą niż 3.0 i ma zastosowanie motywów niestandardowych, wybierz motyw odpowiedni dla danej platformy, wersji.

  • Nowe widżety
    • AdapterViewAnimator

      Klasa podstawowa obiektu AdapterView, który wykonuje animacje przy przełączaniu między różnymi poglądami.

    • AdapterViewFlipper

      Prosty ViewAnimator wyświetlający animację między co najmniej 2 widokami, których które zostały do niego dodane. Wyświetlane jest tylko jedno dziecko naraz. 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 kalendarz do wybranej daty. Możesz skonfigurować zakres dat dostępny w widżecie.

    • ListPopupWindow

      Zakotwicza się w widoku hosta i wyświetla listę opcji, np. sugestie podczas wpisywania tekstu w widoku EditText.

    • NumberPicker

      Pozwala użytkownikowi wybrać liczbę ze 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 wprowadzania umożliwia przewiń wartości lub dotknij ponownie, 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 na określonej aktywność i wyświetlanie sugestii wyszukiwania (w taki sam sposób, jak w przypadku tradycyjnego okna wyszukiwania). Ten jest szczególnie przydatny, gdy udostępniasz na pasku działań widżet wyszukiwania. Aby dowiedzieć się więcej, Więcej informacji: Tworzenie interfejsu wyszukiwania.

    • StackView

      Widok, który wyświetla elementy podrzędne w stosie 3D i umożliwia użytkownikom przesunięcie palcem jak rolodex.

Grafika

  • Grafika 2D z akceleracją sprzętową

    Możesz teraz włączyć mechanizm renderowania OpenGL w swojej aplikacji, ustawiając android:hardwareAccelerated="true" w <application> elementu manifestu. elementu lub pojedynczej jednostki <activity> .

    Ta flaga ułatwia aplikacjom, ponieważ przyspiesza ich rysowanie. Dzięki temu animacje są płynniejsze, płynniejsze przewijanie oraz ogólne lepsze działanie i lepsze reagowanie na interakcje użytkowników.

  • Wyświetl obsługę warstw sprzętu i oprogramowania

    Domyślnie w View nie określono żadnej 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 wsparta teksturą specyficzną dla sprzętu (zwykle obiektami Frame Buffer lub FBO na sprzęcie OpenGL) i powoduje renderowanie widoku za pomocą renderowania sprzętowego Androida. potoku, ale tylko wtedy, gdy włączona jest akceleracja sprzętowa w hierarchii widoków. Gdy sprzęt akceleracja jest wyłączona, warstwy sprzętowe zachowują się dokładnie tak samo jak warstwy oprogramowania.

    Warstwa oprogramowania jest wspierana przez bitmapę i sprawia, że widok jest renderowany za pomocą kodu potoku renderowania programowego, nawet jeśli włączona jest akceleracja sprzętowa. 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_HARDWARE i LAYER_TYPE_SOFTWARE.

  • Mechanizm renderowania 3D w 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 umożliwiają teraz nagrywanie filmów w trybie poklatkowym. setCaptureRate() określa liczbę klatek, ujęć.

  • Obsługa tekstur w strumieniach obrazów

    Nowy SurfaceTexture umożliwia przechwytywanie strumienia obrazów w formacie OpenGL ES teksturę. Wywołując połączenie z firmą setPreviewTexture() w sprawie: Camera możesz określić SurfaceTexture, na podstawie których będą rysowane klatki odtwarzania filmu lub klatki podglądu z obiektu aparat fotograficzny.

  • Transmisja na żywo przez HTTP

    Teraz aplikacje mogą przekazywać adres URL playlisty M3U do platformy multimediów, aby rozpocząć HTTP Live w ramach sesji strumieniowania. Platforma multimedialna obsługuje większość specyfikacji HTTP transmisji na żywo, w tym adaptacyjnej szybkości 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.

  • Przesyłanie plików multimedialnych w mediach cyfrowych

    Platforma ma wbudowaną obsługę protokołu Media/Picture Transfer Protocol (MTP/PTP) przez USB, który pozwala użytkownikom łatwo przenosić dowolne pliki multimedialne między urządzeniami i na komputer. Programiści mogą wykorzystać tę pomoc, tworząc aplikacje umożliwiające użytkownikom tworzenie treści pliki multimedialne, które mogą przenieść lub udostępnić między urządzeniami.

  • 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 zaimplementowany w dwóch warstwach architektonicznych:

    • interfejs API platformy DRM, który jest dostępny dla aplikacji i uruchamiany przez maszynę wirtualną Dalvik przez standardowych zastosowań.
    • 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.

    Dla deweloperów aplikacji platforma ta udostępnia abstrakcyjny, ujednolicony interfejs API, który upraszcza zarządzania treścią chronioną. 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. Jednak producenci urządzeń mogą wysyłać do nich wtyczki DRM.

    Wszystkie interfejsy DRM API znajdziesz w pakiecie android.drm.

Obsługa klawiatury

  • Obsługa modyfikatorów Control, Meta, Caps Lock, Num Lock i Scroll Lock. Aby dowiedzieć się więcej, zobacz META_CTRL_ON i powiązane pola.
  • 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 kluczowe zdarzenia pochodzą z pełnej klawiatury, wysyłam zapytanie do: getKeyboardType() i sprawdzam: KeyCharacterMap.FULL
  • TextView umożliwia teraz wycinanie, kopiowanie i wycinanie za pomocą klawiatury i zaznacz wszystkie, używając kombinacji klawiszy Control+X, Control+C Control + V i Control + 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 opcji możesz zarejestrować klawiaturę na skróty przez ustawienie atrybutu android:alphabeticShortcut lub android:numericShortcut dla każdej wartości <item> element (lub 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 zdarzenie kliknięcia można było akceptować tylko w jednym widoku. Android 3.0 Dodano obsługę rozdzielania zdarzeń dotknięcia między widoki, a nawet okna, dzięki czemu różne widoki mogą jednoczesnych dotknięć.

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

Jednak poniższe właściwości pozwalają na wyłączenie dzielenia zdarzeń dotknięcia między widokami określonych 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>
    

    Dzięki temu w widokach podrzędnych w układzie liniowym nie można dzielić zdarzeń dotknięcia – tylko jeden widok aby 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. Na przykład dzięki wyłączeniu podziału zdarzeń dotknięcia w oknach, pasek systemowy nie może odbierać takich zdarzeń jednocześnie działania. Nie ma to wpływu na to, czy wyświetlenia w aktywności mogą dzielić kliknięcia zdarzeń – domyślnie aktywność może nadal dzielić zdarzenia dotyku między 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. Gdy ta opcja jest włączona, WebView wybierze rozwiązanie aby zmaksymalizować wydajność (np. zawartość komponentu WebView może nie być aktualizowana podczas przejścia).
  • Nowe metody WebView:
    • Wywołanie zwrotne w usłudze onPause(), aby wstrzymać przetwarzanie powiązane z komponentem WebView, gdy jest on ukryty. Przydaje się to, by zmniejszyć zbędny procesor lub ruch w sieci, gdy komponent WebView nie znajduje się na pierwszym planie.
    • onResume() oddzwonienie, aby wznowić przetwarzanie powiązany z komponentem WebView, który został wstrzymany w czasie 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" />
    

    Wykluczając parametr capture=camera, użytkownik może też przechwytywać nowe zdjęcie z aparatu lub wybrać je z urządzenia (np. z aplikacji Galeria).

  • Orientacja urządzenia

    Zgodnie z definicją zawartą w zdarzeniu Orientacja urządzenia specyfikacja, przeglądarka umożliwia aplikacjom internetowym nasłuchiwanie zdarzeń DOM, które dostarczają informacje na temat 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 zarejestrować się jako orientacja wydarzenia, wywołując zdarzenie window.addEventListener z typem zdarzenia "deviceorientation" i rejestrować zdarzenia ruchu, rejestrując typ zdarzenia "devicemotion".

  • Przekształcenia 3D CSS

    Zgodnie z definicją zawartą w przekształceniu CSS 3D specyfikacji modułu, przeglądarka pozwala na przekształcanie elementów renderowanych przez CSS w trzy wymiarów.

Narzędzia 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 podobnie jak w przypadku czytnika, używając name() do dodania nazwy właściwości i odpowiednią metodę value(), aby dodać odpowiednie .

Te klasy są domyślnie rygorystyczne. setLenient() są bardziej liberalne w kwestiach, które akceptują. Wyrozumiałość tryb analizy jest również zgodny z domyślnym parserem org.json.

Nowe stałe cech

<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, 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 aplikacja nie wymaga skomplikowanych gestów, a Ty wymagasz nie chcesz, żeby aplikacja była odfiltrowywana z urządzeń z emulowanym ekranem dotykowym, powinien zadeklarować "android.hardware.faketouch" z elementem <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 <uses-feature> dla fałszywego dotyku.

Nowe uprawnienia

  • "android.permission.BIND_REMOTEVIEWS"

    Musisz je zadeklarować jako wymagane uprawnienia w pliku manifestu <service> dla implementacji RemoteViewsService. 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 platform

  • Miejsce na dane
    • obsługę systemu plików ext4, aby włączyć wbudowaną pamięć eMMC.
    • System plików FUSE do obsługi urządzeń MTP.
    • Obsługa trybu hosta USB w przypadku klawiatur i koncentratoró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 systemu zbierania śmieci:
      • 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 (nowoczesna biblioteka I/O)
    • Ulepszone komunikaty o wyjątkach
    • Poprawki 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 jest przydzielony identyfikator w postaci liczby całkowitej – 11 – czyli zapisanych w samym systemie. Ten identyfikator, nazywany „poziomem interfejsu API”, umożliwia stosowanie funkcji systemu pozwalającego poprawnie określić, czy aplikacja jest zgodna z systemu.

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?