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
W sekcjach poniżej znajdziesz techniczny przegląd nowości dla programistów w Androidzie 3.1, w tym nowe funkcje i zmiany w interfejsie API od 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 API USB 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
, reprezentujący zewnętrzny sprzęt połączony jako host USB (urządzenie z Androidem działające jako urządzenie USB).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 do deklarowania typów punktów końcowych, klas urządzeń itp.
Pamiętaj, że chociaż pakiet USB jest wbudowany w platformę, rzeczywiste wsparcie dla hosta USB i trybów akcesoriów na poszczególnych urządzeniach jest określane przez 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 ma być widoczna tylko na urządzeniach obsługujących tryb hosta USB (łączenie 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 tworzenie 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 specyfikacji MTP. Metody w klasie umożliwiają aplikacjom uzyskanie informacji o producencie, modelu, numerze seryjnym i wersji urządzenia.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 umożliwiają aplikacjom uzyskanie informacji o rozmiarze obiektu, formacie danych, typie powiązania, dacie utworzenia i miniaturze.MtpConstants
zawiera stałe do deklarowania kodów formatu pliku MTP, 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 położenie wskaźnika, w którym nastąpiło przewijanie bez dotyku, na przykład za pomocą kółka przewijania myszy. W zdarzenie ruchu wartości osiAXIS_HSCROLL
iAXIS_VSCROLL
określają względne przesunięcie.ACTION_HOVER_MOVE
, zwraca aktualne położenie myszy, gdy nie są naciśnięte żadne przyciski, a także wszystkie punkty pośrednie 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
– urządzenie źródłowe ma 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 ma 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ć funkcji getHistorySize()
, aby uzyskać liczbę historycznych próbek, a następnie pobierać i przetwarzać wszystkie historyczne próbki w kolejności za pomocą funkcji 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 identyfikator przypisany przez system i może też dostarczać dane z kilku ź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 zdarzenia ruchu aplikacje powinny używać metod klasy InputDevice
, aby określić osie obsługiwane 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 osi zwracane w obiekcie InputDevice.MotionRange
określają źródło 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.
W szczególności raportuje zdarzenia ruchu bezdotykowego do View
za pomocą wywołania funkcji onGenericMotionEvent()
, a nie 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 trafiają do aktywnego elementu View
.
Oznacza to na przykład, że View
musi przejąć fokus, aby odbierać zdarzenia joysticka. W razie potrzeby aplikacje mogą obsługiwać te zdarzenia na poziomie aktywności lub dialogu, implementując tam 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
, podklasaRtpStream
, która przenosi dane audio za pomocą protokołu 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 jest też uprawnienie <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 atrybutu resizeMode
to „horizontal”, „vertical” i „none”.
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 na przykładView
stał się przezroczysty, wywołaj funkcjęalpha(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 przed rozpoczęciem animacji wyrenderować widok w swojej warstwie. 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 zyskują większą kontrolę nad przekształceniami 3D widoku, takimi jak jego obracanie.
- Aplikacje mogą używać nowej metody
- Pobieranie widoku kalendarza z DatePickera
- Nowa metoda
getCalendarView()
umożliwia pobieranie wartościCalendarView
z wystąpieniaDatePicker
.
- 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
- Teraz możesz określić obiekt rysowalny, który ma być używany jako kursor tekstowy, za pomocą nowego atrybutu zasobu
textCursorDrawable
.
- Teraz możesz określić obiekt rysowalny, który ma być używany jako kursor tekstowy, za pomocą nowego 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 określić, że wszystkie piksele w Bitmapie są 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 . Jest to wskazówka dotycząca rysowania, ponieważ w niektórych przypadkach bitmapa, która jest nieprzejrzysta, może być rysowana szybciej niż bitmapa, która ma nieprzezroczyste wartości alfa na poziomie piksela.getByteCount()
uzyskuje rozmiar mapy bitowej w skale B.getGenerationId()
pozwala aplikacji sprawdzić, czy obraz Bitmap został zmodyfikowany, np. w celu wykorzystania w pamięci podręcznej.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ć
- Wydajna 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 mogą teraz uzyskiwać dostęp do statystyk dotyczących większej liczby typów wykorzystania sieci za pomocą nowych metod w
TrafficStats
. Aplikacje mogą korzystać z metod pobierania statystyk UDP, liczby pakietów, bajtów transmisji/odbierania TCP dla danego identyfikatora UID.
- Aplikacje mogą teraz uzyskiwać dostęp do statystyk dotyczących większej liczby typów wykorzystania sieci za pomocą nowych metod w
- 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 zainicjować ten typ pobierania, aplikacje przekazują wartość
VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION
do metodysetNotificationVisibility()
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 zainicjować ten typ pobierania, aplikacje przekazują wartość
- 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
- Element
InputMethodSubtype
dodaje metodęcontainsExtraValueKey()
, która sprawdza, czy podtyp zawiera ciąg znaków ExtraValue, oraz metodęgetExtraValueOf()
, która wyodrębnia określoną wartość klucza z mapy haszowej ExtraValue.
- Element
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 menedżer pakietów systemu śledzi aplikacje, które są w stanie zatrzymanym, i zapewnia możliwość kontrolowania ich uruchamiania z procesów działających w tle i z 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 mieć możliwość aktywowania komponentów w zatrzymanych komponentach aplikacji.
FLAG_INCLUDE_STOPPED_PACKAGES
– Uwzględnij filtry intencji zatrzymanych aplikacji na liście potencjalnych celów i rozstrzygnięcia.FLAG_EXCLUDE_STOPPED_PACKAGES
– wykluczanie z listy potencjalnych celów filtrów intencji zatrzymanych aplikacji.
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
– wysyłane do pakietu instalacyjnego aplikacji przy jej pierwszym uruchomieniu (czyli przy pierwszym przejściu z stanu zatrzymanego). 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. Nie zawiera on żadnych dodatkowych danych. Aby je 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
- Teraz możesz uzyskać natywny opis pliku int dla
ParcelFileDescriptor
, używając jednej z nowych metodgetFd()
lubdetachFd()
.
- Teraz możesz uzyskać natywny opis pliku int dla
WebKit
- Pliki cookie schematu pliku
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
. W przypadkuCookieManager
możesz sprawdzić, czy pliki cookie schematu plików są włączone, wywołując funkcjęallowFileSchemeCookies()
.
- Powiadomienie o prośbie o logowanie
- Aby obsługiwać funkcje automatycznego logowania w przeglądarce wprowadzone w Androidzie 3.0, nowa metoda
onReceivedLoginRequest()
powiadamia aplikację goszczącą, że żądanie automatycznego logowania użytkownika zostało przetworzone.
- Aby obsługiwać funkcje automatycznego logowania w przeglądarce wprowadzone w Androidzie 3.0, nowa 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 wbudowanego w tag HTML5
<video>
filmu. W miarę możliwości odtwarzanie odbywa się z akceleracją sprzętową. - 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 w zakresie obsługi nowych funkcji sprzętowych
w tej wersji platformy. Deweloperzy deklarują te i inne stałe funkcji w elementach pliku 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 o deklarowaniu funkcji w pliku manifestu aplikacji znajdziesz w artykule Filtry Google Play.
Raport o różnicach w interfejsie API
Szczegółowe informacje o wszystkich zmianach interfejsu API w Androidzie 3.1 (poziom interfejsu API 12) znajdziesz w raporcie z różnicami w interfejsie API.
Poziom interfejsu 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 używać w swojej aplikacji interfejsów API wprowadzonych w Androidzie 3.1, musisz skompilować aplikację z użyciem biblioteki Androida dostępnej w ramach platformy pakietu 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?