Poziom API: 12
Dla programistów platforma Android 3.1
(HONEYCOMB_MR1
) jest dostępny 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. Platforma do pobrania nie zawiera bibliotek zewnętrznych.
Dla programistów platforma Android 3.1 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 i testowanie pod kątem Androida 3.1, użyj Menedżera pakietów Android SDK, aby pobrać platformę do pakietu SDK.
Omówienie interfejsu API
Poniższe sekcje zawierają omówienie nowych funkcji dla programistów od strony technicznej w Androidzie 3.1, w tym nowe funkcje i zmiany w interfejsie API poprzedniej wersji.
Interfejsy API USB
Android 3.1 wprowadza nowe, zaawansowane interfejsy API integrowanie połączonych urządzeń peryferyjnych z aplikacjami działającymi na platformie. Interfejsy API są oparte na stosie USB (Universal Serial Bus) i usługach, które: wbudowany w platformę, w tym obsługę hosta USB i urządzenia. interakcje. Za pomocą tych interfejsów API programiści mogą tworzyć aplikacje wykrywanie i komunikowanie się z różnymi rodzajami urządzeń połączonych przez USB.
Stos i interfejsy API rozróżniają 2 podstawowe typy sprzętu USB: czy urządzenie z systemem Android działa jako host, czy jako sprzęt zewnętrzny; działa jako host:
- Urządzenie USB to połączone urządzenie, które zależy od Urządzenie z systemem Android pełniące funkcję hosta. Dotyczy to na przykład większości urządzeń wejściowych, myszy, i joysticki to urządzenia USB, podobnie jak wiele aparatów, koncentratorów i innych urządzeń.
- Akcesorium USB to połączone urządzenie, które ma port USB kontroler hosta, zasilanie i zaprojektowany do komunikacji z Urządzenia z Androidem przez USB. Różne urządzenia peryferyjne można połączyć jako akcesoria, od kontrolerów dla robotów po sprzęt muzyczny, rowery treningowe i inne.
W przypadku obu typów urządzeń – urządzeń USB i akcesoriów USB – Interfejsy USB API platformy obsługują wykrywanie przez zamierzony komunikat po podłączeniu lub oraz standardowe interfejsy, punkty końcowe i tryby transferu (kontrola, zbiorcze i przerywanie).
Interfejsy USB API są dostępne w pakiecie android.hardware.usb
.
klasa centralna to UsbManager
, która zapewnia
metody pomocnicze do identyfikacji i komunikowania się
zarówno urządzeń USB, jak i akcesoriów USB. Aplikacje mogą pozyskać instancję
UsbManager
, a następnie zapytanie o listę dołączonych
urządzeń i akcesoriów, a następnie komunikować się z nimi lub nimi zarządzać.
UsbManager
deklaruje również działania intencji, które
komunikatów systemowych, informując o podłączeniu urządzenia USB lub akcesorium;
został odłączony.
Inne klasy to:
UsbDevice
, klasa reprezentująca zasoby zewnętrzne podłączona jako urządzenie USB (urządzenie z systemem Android działa jako hosta).UsbAccessory
, reprezentuje sprzęt zewnętrzny podłączone jako host USB (urządzenie z systemem Android działa jako urządzenia).UsbInterface
iUsbEndpoint
, które zapewniają dostęp do standardowego portu USB interfejsów i punktów końcowych urządzenia.UsbDeviceConnection
iUsbRequest
do wysyłania i odbierania danych oraz kontroli synchronicznie i asynchronicznie, wysyłając wiadomości do lub z urządzenia USB.UsbConstants
, który zawiera stałe dla deklarowanie typów punktów końcowych, klas urządzeń itp.
Choć stos USB jest wbudowany w platformę, obsługa w przypadku trybów hosta USB i otwartych akcesoriów na określonych urządzeniach jest określana wartością ich producentów. Tryb hosta opiera się na odpowiednich złączach USB, urządzenia z systemem Android.
Deweloperzy mogą też poprosić o filtrowanie w Google Play, ich aplikacje nie będą dostępne dla użytkowników, których urządzenia nie obsługują obsługi USB. Aby poprosić o filtrowanie, dodaj co najmniej jeden z tych elementów do pliku manifestu aplikacji odpowiednio do potrzeb:
- Jeśli aplikacja powinna być widoczna tylko dla urządzeń obsługujących USB
trybu hosta (połączenia urządzeń USB), zadeklaruj ten element:
<uses-feature android:name="android.hardware.usb.host" android:required="true">
- Jeśli aplikacja powinna być widoczna tylko dla urządzeń obsługujących USB
akcesoriów (połączenia hostów USB), zadeklaruj ten element:
<uses-feature android:name="android.hardware.usb.accessory" android:required="true">
Pełne informacje na temat tworzenia aplikacji współpracujących z akcesoriów USB – zapoznaj się z dokumentację dla programistów.
Aby zapoznać się z przykładowymi aplikacjami, które korzystają z interfejsu API hosta USB, zapoznaj się z artykułami ADB Test i Missile Menu z aplikacjami
Interfejs API MTP/PTP
Android 3.1 udostępnia nowy interfejs API MTP, który umożliwia aplikacjom bezpośrednią interakcję z podłączonymi kamerami i innymi urządzeniami PTP. Nowy interfejs API ułatwia aplikacja do otrzymywania powiadomień o podłączeniu i odłączeniu urządzeń, zarządzać plikami i miejscem na tych urządzeniach oraz przenosić pliki i metadane na i od nich. Interfejs MTP API implementuje podzbiór PTP (Picture Transfer Protocol) specyfikacji MTP (Media Transfer Protocol).
Interfejs MTP API jest dostępny w pakiecie android.mtp
i zapewnia
tych klasach:
- Pole
MtpDevice
zawiera urządzenie MTP, przez magistralę hosta USB. Aplikacja może utworzyć instancję obiektu a następnie użyć jego metod, aby uzyskać informacje o urządzeniu zapisane w nim obiekty, a także otwarcie połączenia i przesyłanie danych. Oto niektóre z nich:getObjectHandles()
zwraca listę nicków wszystkich obiektów na urządzeniu, które do określonego formatu i elementu nadrzędnego. Aby uzyskać informacje o obiekcie, aplikacja może przekazać nick dogetObjectInfo()
.importFile()
umożliwia aplikacji kopiowanie danych obiektu do pliku w systemie zewnętrznym pamięci masowej. To wywołanie może zostać zablokowane na dowolny czas w zależności od rozmiaru danych i szybkości urządzeń, dlatego należy wybierać w wątku.open()
umożliwia aplikacji otwarcie podłączonego urządzenia MTP/PTP.getThumbnail()
za możliwość zwrotu i miniaturę obiektu w postaci tablicy bajtów.
MtpStorageInfo
zawiera informacje o miejscu na dane na urządzeniu MTP odpowiadającemu zbiorowi danych StorageInfo opisanym w sekcji 5.2.2 specyfikacji MTP. Metody klasy umożliwiają aplikacji otrzymasz ciąg opisu jednostki pamięci masowej, informacje o wolnym miejscu, maksymalnej pojemności, identyfikatora miejsca na dane i identyfikatora woluminu.MtpDeviceInfo
zawiera informacje o urządzeniu MTP odpowiadające zbiorowi danych DeviceInfo opisanemu w sekcji 5.1.1 dokumentu MTP specyfikacji. Metody zajęć pozwalają aplikacjom uzyskać producent, model, numer seryjny i wersja.MtpObjectInfo
zawiera informacje o przechowywanym obiekcie na urządzeniu MTP odpowiadające zbiorowi danych ObjectInfo opisanemu w sekcji 5.3.1 specyfikacji MTP. Metody w klasie pozwalają aplikacjom uzyskać rozmiar obiektu, format danych, typ powiązania, datę utworzenia i miniaturę i informacjami o nich.MtpConstants
udostępnia stałe do deklarowania pliku MTP formatów, typu powiązania i stanu ochrony.
Obsługa nowych urządzeń wejściowych i zdarzeń ruchu
Android 3.1 rozszerza podsystem wejściowy o obsługę nowych urządzeń wejściowych zdarzeń ruchu we wszystkich widokach i oknach. Deweloperzy mogą tworzyć te funkcje, dzięki którym użytkownicy mogą korzystać z aplikacji za pomocą myszy, kulki, joysticki, kontrolery do gier i inne urządzenia, a także klawiatury i ekrany dotykowe.
Do obsługi myszy, kółka przewijania i manipulatora kulkowego platforma obsługuje 2 nowe działania związane ze zdarzeniami ruchu:
ACTION_SCROLL
, który opisuje wskaźnik. lokalizacja, w której niedotykowy ruch przewijania, np. kółkiem myszy miało miejsce. W obiekcie MotionEvent wartość osiAXIS_HSCROLL
iAXIS_VSCROLL
określa względny przewijanie ruch.ACTION_HOVER_MOVE
wskazuje bieżącą położenie myszy po naciśnięciu żadnego przycisku oraz dowolny pośredni punktów od ostatniego zdarzeniaHOVER_MOVE
. Najedź kursorem myszy na klawisz Enter i zamknij Powiadomienia nie są jeszcze obsługiwane.
Aby obsługiwać joysticki i pady do gier, klasa InputDevice
obejmuje te nowe źródła urządzeń wejściowych:
SOURCE_CLASS_JOYSTICK
– źródło, Urządzenie jest wyposażone w osie joysticka.SOURCE_CLASS_BUTTON
– źródło, urządzenie ma przyciski lub klawisze.SOURCE_GAMEPAD
– urządzenie źródłowe, ma przyciski pada do gier, takie jakKEYCODE_BUTTON_A
lubKEYCODE_BUTTON_B
. SugerujeSOURCE_CLASS_BUTTON
SOURCE_JOYSTICK
– urządzenie źródłowe, są osie joysticka. Oznacza SOURCE_CLASS_JOYSTICK.
Aby opisać zdarzenia ruchu pochodzące z tych nowych źródeł, a także od myszy
i kulki, platforma definiuje teraz kody osi w elemencie MotionEvent
, podobnie jak w przypadku kodów kluczy w systemie KeyEvent
. Nowe kody osi dla joysticków
i kontrolery do gier
AXIS_HAT_X
, AXIS_HAT_Y
, AXIS_RTRIGGER
, AXIS_ORIENTATION
, AXIS_THROTTLE
i wiele innych.
Istniejące osie MotionEvent
są reprezentowane przez wartości AXIS_X
, AXIS_Y
,
AXIS_PRESSURE
, AXIS_SIZE
, AXIS_TOUCH_MAJOR
, AXIS_TOUCH_MINOR
, AXIS_TOOL_MAJOR
, AXIS_TOOL_MINOR
i AXIS_ORIENTATION
.
Dodatkowo MotionEvent
definiuje kilka ogólnych
kodów osi, które są używane, gdy platforma nie wie, jak zmapować
dla danej osi. Określone urządzenia mogą używać ogólnych kodów osi, aby przekazywać niestandardowe wartości.
z danymi ruchu do aplikacji. Pełną listę osi i ich przeznaczenia
interpretacje znajdują się w dokumentacji klas MotionEvent
.
Platforma dostarcza do aplikacji zdarzenia ruchu partiami, więc w jednym miejscu
może obejmować bieżącą pozycję i wiele tak zwanych ruchów historycznych.
Aplikacje powinny używać metody getHistorySize()
, aby uzyskać
liczby próbek historycznych, a następnie pobierać i przetwarzać wszystkie historyczne
próbek w kolejności przy użyciu: getHistoricalAxisValue()
. Następnie aplikacje powinny przetworzyć bieżące
próbkę wykorzystującą funkcję getAxisValue()
.
Niektóre osie można pobrać za pomocą specjalnych metod metody dostępu. Przykład:
zamiast wywoływać getAxisValue()
, aplikacje mogą wywoływać getX()
. Osie z wbudowanymi akcesorami to AXIS_X
, AXIS_Y
,
AXIS_PRESSURE
, AXIS_SIZE
, AXIS_TOUCH_MAJOR
, AXIS_TOUCH_MINOR
, AXIS_TOOL_MAJOR
, AXIS_TOOL_MINOR
i AXIS_ORIENTATION
.
Każde urządzenie wejściowe ma unikalny, przypisany przez system identyfikator, który może też
wiele źródeł. Gdy urządzenie udostępnia wiele źródeł,
może przekazywać dane osi za pomocą tej samej osi. Na przykład nadchodzące zdarzenie dotknięcia
ze źródła dotykowego wykorzystuje oś X do określania pozycji ekranu, a joystick
zdarzenie pochodzące ze źródła joysticka będzie używać osi X dla pozycji drążka
. Z tego powodu ważne jest, aby aplikacje interpretowały oś
według źródła, z którego pochodzą. Podczas obsługi ruchu
, aplikacje powinny używać metod na platformie InputDevice
do określania osi obsługiwanych przez urządzenie lub źródło. Konkretnie:
aplikacje mogą używać parametru getMotionRanges()
do wysyłania zapytań dotyczących wszystkich osi urządzenia lub wszystkich osi danego elementu
źródła urządzenia. W obu przypadkach informacje o zakresie dla osi zwróconych w
obiekt InputDevice.MotionRange
określa źródło dla
każdej wartości osi.
Ponieważ zdarzenia ruchu generowane przez joysticki, kontrolery do gier, myszy
kulki nie są zdarzeniami dotknięciami, platforma dodaje nową metodę wywołania zwrotnego dla
przekazanie ich do kategorii View
jako „standardowe” zdarzenia ruchu.
Mówi konkretnie o zdarzeniach ruchu niedotykowych
View
poprzez połączenie z numerem onGenericMotionEvent()
, a nie z numerem onTouchEvent()
.
Platforma w różny sposób wysyła ogólne zdarzenia ruchu w zależności od
klasę źródła zdarzeń. SOURCE_CLASS_POINTER
zdarzeń
przejdź do przycisku View
pod wskaźnikiem, podobnie jak
wydarzenia. Wszystkie pozostałe przejdą do obecnie aktywnego elementu View
.
Oznacza to, że element View
musi na przykład skupić się, aby wyświetlić
odbierania zdarzeń joysticka. W razie potrzeby aplikacje mogą obsługiwać te zdarzenia w
poziomu aktywności lub okna, implementując w nim onGenericMotionEvent()
.
Aby zapoznać się z przykładową aplikacją, która wykorzystuje ruch joysticka zdarzeń: patrz GameControllerInput. i GameView.
Interfejs API RTP
Android 3.1 udostępnia interfejs API wbudowanemu protokołem RTP (Real-time Transport Protocol) który pozwala aplikacjom zarządzać danymi na żądanie lub danymi interaktywnymi strumieniowanie danych. W szczególności chodzi o aplikacje umożliwiające korzystanie z VOIP, urządzeń typu push, aby rozmawiać, rozmów wideo a strumieniowanie audio może używać interfejsu API do inicjowania sesji oraz transmitowania i odbierania danych strumienie danych w dowolnej dostępnej sieci.
Interfejs API RTP jest dostępny w pakiecie android.net.rtp
. Zajęcia
uwzględnij:
RtpStream
, klasa podstawowa strumieni, które wysyłają i odbieranie pakietów sieciowych z ładunkami multimedialnymi przez RTP.AudioStream
, podklasa klasyRtpStream
, która przenosi ładunki audio przez RTP.AudioGroup
– lokalne centrum audio do zarządzania miksowanie głośnika, mikrofonu i urządzeniaAudioStream
.AudioCodec
, który zawiera zbiór kodeków zdefiniowanych na potrzeby elementuAudioStream
.
Aby zapewnić obsługę rozmów audio i podobnych zastosowań, aplikacja tworzy instancję dwie klasy jako punkty końcowe strumienia:
AudioStream
określa zdalny punkt końcowy i składa się mapowania sieci i skonfigurowanegoAudioCodec
.AudioGroup
to lokalny punkt końcowy dla jednego lub więcej:AudioStream
. Składanka z muzyką z gatunkuAudioGroup
wszystkie modułyAudioStream
i opcjonalnie współdziałają z urządzeniem głośnik i mikrofon.
Najprostsze zastosowanie obejmuje pojedynczy zdalny punkt końcowy i lokalny punkt końcowy.
W przypadku bardziej złożonych zastosowań zapoznaj się z ograniczeniami
AudioGroup
Aby używać interfejsu API RTP, aplikacje muszą prosić użytkownika o zgodę przez
deklaruję: <uses-permission
android:name="android.permission.INTERNET">
w plikach manifestu. Aby uzyskać dostęp do mikrofonu urządzenia, wymagane są też uprawnienia <uses-permission
android:name="android.permission.RECORD_AUDIO">
.
Widżety aplikacji z możliwością zmiany rozmiaru
Począwszy od Androida 3.1, programiści mogą tworzyć swoje widżety na ekranie głównym z możliwością zmiany rozmiaru – w poziomie, w pionie lub na obu osiach. Użytkownicy przytrzymują klawisz A widżet, aby wyświetlić uchwyty zmiany rozmiaru, a następnie przeciągnij go w pionie lub poziomie uchwyty do zmiany rozmiaru siatki układu.
Programiści mogą zmienić rozmiar dowolnego widżetu na ekranie głównym, definiując
Atrybut resizeMode
w metadanych AppWidgetProviderInfo
widżetu. Wartości parametru
Atrybut resizeMode
obejmuje wartości „poziome”, „pionowe” i „brak”.
Aby zadeklarować widżet jako możliwy do zmiany rozmiaru w poziomie i w pionie, podaj wartość
„poziome|pionowe”.
Oto przykład:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="72dp" android:updatePeriodMillis="86400000" android:previewImage="@drawable/preview" android:initialLayout="@layout/example_appwidget" android:configure="com.example.android.ExampleAppWidgetConfigure" android:resizeMode="horizontal|vertical" > </appwidget-provider>
Więcej informacji o widżetach na ekranie głównym znajdziesz w artykule Widżety aplikacji. dokumentacji.
Schemat animacji
- Nowa klasa ViewpropertyAnimator
- Nowa klasa
ViewPropertyAnimator
udostępnia wygodny pozwala programistom animować wybrane właściwości obiektówView
. Klasa automatyzuje i optymalizuje animację właściwości oraz ułatwia możesz zarządzać wieloma jednocześnie animowanymi animacjami w obiekcieView
.Korzystanie z
ViewPropertyAnimator
jest proste. Aby animować właściwości elementuView
, zadzwoń pod numeranimate()
Utwórz obiektViewPropertyAnimator
dla tego elementu (View
). Użyj wViewPropertyAnimator
, aby określić, którą właściwość ani sposobu ich animacji. Aby np. zmienić kolor elementuView
na przezroczysty, Zadzwoń pod numeralpha(0);
. ObiektViewPropertyAnimator
obsługuje szczegóły konfigurowania bazowej klasyAnimator
i uruchamiania jej, a następnie renderowania animację.
- Nowa klasa
- Kolor tła animacji
- Nowe
getBackgroundColor()
isetBackgroundColor(int)
metod pozwala pobiera/ustawiasz kolor tła za animacjami, np. w animacji okna. Obecnie tło musi być czarne z dowolnym poziomem alfa.
- Nowe
- Pobieram animowany ułamek z pola
ViewAnimator
- Nowy
getAnimatedFraction()
metoda pozwala poznać bieżący ułamek animacji – czas, jaki upłynął lub interpolowany. ułamek używany w ostatniej aktualizacji ramki – zValueAnimator
.
- Nowy
Platforma interfejsu
- Wymuszone renderowanie warstwy
- Nowa metoda
buildLayer()
pozwala aplikacji wymusza utworzenie warstwy widoku i natychmiastowe wyrenderowanie jej widoku. Aplikacja może na przykład użyć tej metody, aby renderować widok w swojej warstwy przed rozpoczęciem animacji. Jeśli widok jest złożony, renderuj go w warstwa przed rozpoczęciem animacji pozwala uniknąć pomijania klatek.
- Nowa metoda
- Odległość kamery
- Aplikacje mogą używać nowej metody
setCameraDistance(float)
, aby ustawić odległość od kamera widoku. Dzięki temu aplikacje mają większą kontrolę nad przekształceniami 3D takich jak rotacje.
- Aplikacje mogą używać nowej metody
- Uzyskiwanie widoku kalendarza za pomocą narzędzia DatePicker
- Nowa metoda
getCalendarView()
pozwala kupićCalendarView
odDatePicker
instancji.
- Nowa metoda
- Otrzymywanie wywołań zwrotnych po odłączeniu widoków
- Nowa aplikacja
View.OnAttachStateChangeListener
umożliwia: Odbierz wywołania zwrotne, gdy widok danych jest dołączany lub odłączony od jego okna. Użyj formatu:addOnAttachStateChangeListener()
aby dodać detektor, a potemaddOnAttachStateChangeListener()
, by go usunąć.
- Nowa aplikacja
- Detektor menu nawigacyjnego fragmentu, nowy podpis onInflate()
- Nowa metoda:
setOnBreadCrumbClickListener()
, daje haczyk, który pozwala aplikacje przechwytują kliknięcia elementów menu nawigacyjnego i podejmują niezbędne działania przed przejściem do wpisu lub fragmentu, który został kliknięty. - W klasie
Fragment
właściwośćonInflate(attrs, savedInstanceState)
została wycofana. Zamiast niej używaj elementuonInflate(activity, attrs, savedInstanceState)
.
- Nowa metoda:
- Wyświetl wynik wyszukiwania w nowej karcie
- Klucz danych
EXTRA_NEW_SEARCH
dla intencjiACTION_WEB_SEARCH
pozwala otworzyć wyszukiwanie w nowej karcie przeglądarki, a nie na już istniejącej.
- Klucz danych
- Kursor tekstowy do rysowania
- Możesz teraz wskazać element rysowalny, który będzie używany jako kursor tekstowy,
atrybutu zasobu
textCursorDrawable
.
- Możesz teraz wskazać element rysowalny, który będzie używany jako kursor tekstowy,
atrybutu zasobu
- Ustawianie wyświetlanego elementu podrzędnego w widokach zdalnych
- W
RemoteViews
podklasach jest dostępna nowa, udogodnienie metoda:setDisplayedChild(viewId, childIndex)
, pozwalają na ustawienie elementu podrzędnego wyświetlanego wViewAnimator
oraz PodklasyAdapterViewAnimator
, takie jakAdapterViewFlipper
,StackView
,ViewFlipper
iViewSwitcher
.
- W
- Ogólne klawisze do padów do gier i innych urządzeń wejściowych
KeyEvent
dodaje szereg ogólnych kodów kluczy do pod kątem przycisków do gier. Zajęcia pozwalają też dodaćisGamepadButton(int)
i kilka innych metod pomocniczych do pracy z kodami kluczy.
Grafika
- Pomoc dotycząca zarządzania mapami bitowymi
setHasAlpha(boolean)
pozwala aplikacji na wszystkie piksele w bitmapie są znane jako nieprzezroczyste (fałsz) lub że niektóre piksele mogą zawierać nieprzezroczyste wartości alfa (prawda). Uwaga: w przypadku niektórych konfiguracji (np. jako RGB_565) to wywołanie jest ignorowane, ponieważ nie obsługuje kanałów alfa na piksel . To tylko wskazówka dotycząca rysunku, ponieważ w niektórych przypadkach bitmapa jest znana może być szybsze niż w przypadku nieprzezroczystego wartości alfa na piksel.getByteCount()
uzyskuje rozmiar mapy bitowej w skale B.getGenerationId()
umożliwia aplikacji znajdowanie czy mapa bitowa została zmodyfikowana, np. na potrzeby buforowania.sameAs(android.graphics.Bitmap)
określa czy dana mapa bitowa różni się od bieżącej mapy bitowej pod względem wymiarów, konfiguracji i danych pikseli.
- Ustawianie lokalizacji i obrotu kamery
Camera
dodaje 2 nowe metodyrotate()
isetLocation()
do: kontrola z określeniem lokalizacji kamery na potrzeby przekształceń 3D.
Sieć
- Zaawansowana blokada Wi-Fi
- Nowa blokada sieci Wi-Fi o wysokiej wydajności umożliwia aplikacjom
wydajne połączenia Wi-Fi nawet przy wyłączonym ekranie.
Aplikacje, które przez dłuższy czas odtwarzają muzykę, filmy lub głosy głosowe, mogą pozyskiwać:
wysokiej jakości blokada Wi-Fi, która umożliwia strumieniowanie nawet na ekranie
jest wyłączony. Ze względu na większe zużycie energii aplikacje powinny pobierać
Wi-Fi o wysokiej wydajności, gdy wymagane jest długotrwałe uruchomienie
połączenia.
Aby utworzyć bardzo skuteczną blokadę, przekaż
WIFI_MODE_FULL_HIGH_PERF
jako tryb blokady w połączenie z numeremcreateWifiLock()
.
- Nowa blokada sieci Wi-Fi o wysokiej wydajności umożliwia aplikacjom
wydajne połączenia Wi-Fi nawet przy wyłączonym ekranie.
Aplikacje, które przez dłuższy czas odtwarzają muzykę, filmy lub głosy głosowe, mogą pozyskiwać:
wysokiej jakości blokada Wi-Fi, która umożliwia strumieniowanie nawet na ekranie
jest wyłączony. Ze względu na większe zużycie energii aplikacje powinny pobierać
Wi-Fi o wysokiej wydajności, gdy wymagane jest długotrwałe uruchomienie
połączenia.
- Więcej statystyk ruchu
- Aplikacje mają teraz dostęp do statystyk innych typów wykorzystania sieci
za pomocą nowych metod w zadaniu
TrafficStats
. Aplikacje mogą korzystać z metod pobierania statystyk UDP, liczby pakietów, bajtów transmisji/odbierania TCP dla danego identyfikatora UID.
- Aplikacje mają teraz dostęp do statystyk innych typów wykorzystania sieci
za pomocą nowych metod w zadaniu
- Nazwa użytkownika uwierzytelniania SIP
- Aplikacje mogą teraz pobierać i ustawiać nazwę użytkownika uwierzytelniania SIP auth dla profilu
za pomocą
nowe metody
getAuthUserName()
isetAuthUserName()
.
- Aplikacje mogą teraz pobierać i ustawiać nazwę użytkownika uwierzytelniania SIP auth dla profilu
za pomocą
nowe metody
Menedżer pobierania
- Obsługa pobranych plików
- Aplikacje mogą teraz inicjować pobieranie, które powiadamiają użytkowników
do końca. Aby rozpocząć pobieranie tego typu, aplikacje muszą przejść
VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION
w metodziesetNotificationVisibility()
do obiektu żądania. - Nowa metoda (
addCompletedDownload()
) pozwala aplikacji dodawać pliki do pobiera bazę danych, co umożliwia zarządzanie nią przez aplikację Pobrane pliki.
- Aplikacje mogą teraz inicjować pobieranie, które powiadamiają użytkowników
do końca. Aby rozpocząć pobieranie tego typu, aplikacje muszą przejść
- Pokaż pobrane pliki posortowane według rozmiaru
- Aplikacje mogą uruchamiać aplikację Pobrane pliki w trybie sortowania według rozmiaru
przez dodanie nowego, dodatkowego
INTENT_EXTRAS_SORT_BY_SIZE
do intencjiACTION_VIEW_DOWNLOADS
.
- Aplikacje mogą uruchamiać aplikację Pobrane pliki w trybie sortowania według rozmiaru
przez dodanie nowego, dodatkowego
platforma IME
- Uzyskiwanie klucza wartości dodatkowej metody wprowadzania
InputMethodSubtype
dodaje makro metodacontainsExtraValueKey()
, aby sprawdzić, czy zapisany jest ciąg ExtraValue dla podtypu metodygetExtraValueOf()
do wyodrębnienia konkretnej wartości klucza z mapy haszującej ExtraValue.
Multimedia
- Nowe strumieniowane formaty audio
- Platforma multimedialna ma wbudowaną obsługę nieprzetworzonych materiałów AAC ADTS, ulepszone strumieniowanie dźwięku oraz obsługa dźwięku FLAC zapewniające najwyższą jakość (bezstratnych) skompresowanych treści audio; Zobacz obsługiwane formaty multimediów dokument, aby dowiedzieć się więcej.
Zatrzymano elementy sterujące uruchamianiem aplikacji
Począwszy od Androida 3.1, systemowy menedżer pakietów śledzi które są w stanie zatrzymania i umożliwiają sterowanie ich uruchamianie w tle i innych aplikacji.
Pamiętaj, że stan zatrzymania aplikacji to nie to samo co stan działania zatrzymano. System oddzielnie zarządza tymi 2 stanami zatrzymania.
Platforma definiuje 2 nowe flagi intencji, które umożliwiają nadawcy czy intencja powinna zezwolić na aktywowanie komponentów w zatrzymanym działaniu aplikacji.
FLAG_INCLUDE_STOPPED_PACKAGES
– Uwzględnij filtry intencji zatrzymanych aplikacji na liście potencjalnych celów i rozstrzygnięcia.FLAG_EXCLUDE_STOPPED_PACKAGES
– Wyklucz filtry intencji zatrzymanych aplikacji z listy potencjalnych celów.
Jeśli w intencji nie zdefiniowano żadnej z tych flag (albo żadna z tych flag), domyślnie zachowanie to uwzględnienie filtrów zatrzymanych aplikacji na liście potencjalnych wartościach docelowych.
Zwróć uwagę, że system dodaje element FLAG_EXCLUDE_STOPPED_PACKAGES
do całej transmisji
Zapobiega to wysyłaniu komunikatów z usług w tle
niezamierzone lub niepotrzebne uruchamianie komponentów zatrzymanych aplikacji.
Usługa lub aplikacja działająca w tle może zastąpić to zachowanie, dodając parametr
Flaga FLAG_INCLUDE_STOPPED_PACKAGES
do przesłania
które powinny umożliwiać aktywowanie zatrzymanych aplikacji.
Aplikacje są w stanie zatrzymania w chwili, gdy są instalowane po raz pierwszy, ale nie są jeszcze uruchomione i ręcznie zatrzymane przez użytkownika (w sekcji Zarządzaj aplikacji).
Powiadomienie o pierwszym uruchomieniu i uaktualnieniu aplikacji
Platforma dodaje ulepszone powiadomienia o pierwszym uruchomieniu aplikacji oraz uaktualnienia za pomocą 2 nowych działań intencji:
ACTION_PACKAGE_FIRST_LAUNCH
– wysłano do pakiet instalatora aplikacji w chwili jej pierwszego uruchomienia; (tj. po pierwszym przesunięciu go ze stanu zatrzymania). Dane zawiera nazwę pakietu.ACTION_MY_PACKAGE_REPLACED
– powiadamia aplikację, która została zaktualizowana i zainstalowana nowa wersja. istniejącej wersji. Jest on wysyłany tylko do aplikacji, która została zastąpiona. it nie zawiera żadnych dodatkowych danych. Aby go otrzymać, zadeklaruj filtr intencji dla tego działania. Za pomocą intencji możesz aktywować kod, który pomaga uzyskać po uaktualnieniu aplikacja powinna znowu działać w prawidłowym stanie.Ta intencja jest wysyłana bezpośrednio do aplikacji, ale tylko wtedy, gdy uaktualniono, gdy było w stanie uruchomienia (a nie w stanie zatrzymania).
Podstawowe narzędzia
- Pamięć podręczna LRU
- Nowa klasa w języku
LruCache
zapewnia Twoim aplikacjom korzyści z wydajnego buforowania. Aplikacje mogą używać klasy w celu skrócenia czasu poświęcanego na używanie klasy przetwarzania i pobierania danych z sieci przy zachowaniu rozsądnego ilość pamięci dla danych w pamięci podręcznej.LruCache
oznacza pamięć podręczną który zawiera silne odwołania do ograniczonej liczby wartości. Za każdym razem, gdy wartość jest gdy uzyskano dostęp, jest on przeniesiony na początek kolejki. Po dodaniu wartości do pełnego pola wartość na końcu kolejki jest usuwana i może kwalifikować się do czyszczenia pamięci.
- Nowa klasa w języku
- Deskryptor pliku jako
int
- Możesz teraz pobrać int. deskryptora pliku natywnego dla obiektu
ParcelFileDescriptor
przy użyciu jednej z nowych metodgetFd()
lubdetachFd()
.
- Możesz teraz pobrać int. deskryptora pliku natywnego dla obiektu
WebKit
- Pliki cookie schematu plików
CookieManager
obsługuje teraz pliki cookie, które używają Schemat URIfile:
. Za pomocą usługisetAcceptFileSchemeCookies()
możesz: włącz/wyłącz obsługę plików cookie schematów plików przed utworzeniem instancji. zWebView
lubCookieManager
. WCookieManager
, możesz sprawdzić, czy pliki cookie schematu plików można włączyć, wywołując metodęallowFileSchemeCookies()
.
- Powiadomienie o prośbie o zalogowanie
- Aby obsługiwać funkcje automatycznego logowania w przeglądarce wprowadzone w Androidzie 3.0,
nowość
metoda
onReceivedLoginRequest()
powiadamia gospodarza w której przetworzono żądanie automatycznego logowania dla użytkownika.
- Aby obsługiwać funkcje automatycznego logowania w przeglądarce wprowadzone w Androidzie 3.0,
nowość
metoda
- Usunięte klasy i interfejsy
- Kilka klas i interfejsów zostało usuniętych z publicznego interfejsu API, które zostały wcześniej wycofane. Zapoznaj się z interfejsem API Raportu różnic, aby dowiedzieć się więcej.
Przeglądarka
Aplikacja Przeglądarka dodaje następujące funkcje, aby obsługiwać przeglądarki internetowe aplikacje:
- Obsługa odtwarzania w treści wideo umieszczonego w kodzie HTML5
<video>
. Gdy tylko jest to możliwe, odtwarzanie jest przyspieszane sprzętowo. - Obsługa warstw o stałej pozycji we wszystkich witrynach (mobilnych na komputerze).
Nowe stałe cech
Platforma dodaje nowe stałe funkcji sprzętowych, które deweloperzy mogą zadeklarować.
w plikach manifestu aplikacji, aby informować podmioty zewnętrzne, takie jak Google
Odtwarzanie wymagań aplikacji dotyczących nowych funkcji sprzętowych
w tej wersji platformy. Deweloperzy deklarują te i inne funkcje
stałe w elementach manifestu <uses-feature>
.
android.hardware.usb.accessory
– aplikacja używa USB API do komunikacji z zewnętrznymi urządzeniami mobilnymi podłączonymi przez USB i .android.hardware.usb.host
– aplikacja używa interfejsu API USB. komunikacją z zewnętrznymi urządzeniami podłączonymi przez USB i działającymi jako urządzenia.
Google Play filtruje aplikacje na podstawie funkcji zadeklarowanych w elementach manifestu <uses-feature>
. Więcej informacji na temat:
deklarowanie funkcji w pliku manifestu aplikacji, przeczytaj artykuł na temat Google Play
Filtry.
Raport o różnicach w interfejsie API
Szczegółowy widok wszystkich zmian interfejsu API w Androidzie 3.1 Poziom 12), patrz interfejs API Raportu różnic.
Poziom API
Android 3.1 udostępnia zaktualizowaną wersję platformy API. Interfejs API systemu Android 3.1 jest przydzielony identyfikator w postaci liczby całkowitej – 12 – 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.1 w aplikacji,
musisz skompilować aplikację zgodnie z biblioteką Androida w bibliotece
z pakietem SDK Androida 3.1. W zależności od potrzeb
może
trzeba też dodać android:minSdkVersion="12"
do elementu <uses-sdk>
w nagłówku aplikacji
pliku manifestu.
Więcej informacji znajdziesz w artykule Co to jest interfejs API Poziom?