Udostępnij za pośrednictwem


Funkcje galaretki bean

Ten dokument zawiera ogólne omówienie nowych funkcji dla deweloperów, które zostały wprowadzone w systemie Android 4.1. Te funkcje obejmują: rozszerzone powiadomienia, aktualizacje usługi Android Beam w celu udostępniania dużych plików, aktualizacje multimediów, odnajdywanie sieci równorzędnej, animacje, nowe uprawnienia.

Omówienie

Android 4.1 (API Level 16), znany również jako "Jelly Bean", został wydany 9 lipca 2012 r. Ten artykuł zawiera ogólne wprowadzenie do niektórych nowych funkcji w systemie Android 4.1 dla deweloperów korzystających z platformy Xamarin.Android. Niektóre z tych nowych funkcji to ulepszenia animacji uruchamiania działania, nowe dźwięki aparatu i ulepszona obsługa nawigacji stosu aplikacji. Teraz można wycinać i wklejać intencje.

Stabilność aplikacji systemu Android jest lepsza dzięki możliwości izolowania zależności od niestabilnych dostawców zawartości. Usługi mogą być również odizolowane, aby były dostępne tylko przez działanie, które je uruchomiło.

Dodano obsługę odnajdywania usług sieciowych przy użyciu usług Opartych na systemie Bonjour, UPnP lub multiemisji DNS. Teraz jest możliwe rozbudowane powiadomienia z sformatowanymi tekstami, przyciskami akcji i dużymi obrazami.

Na koniec dodano kilka nowych uprawnień w systemie Android 4.1.

Wymagania

Aby opracowywać aplikacje platformy Xamarin.Android przy użyciu biblioteki Jelly Bean, należy zainstalować oprogramowanie Xamarin.Android 4.2.6 lub nowsze oraz system Android 4.1 (poziom 16 interfejsu API) za pośrednictwem Menedżera zestawów SDK systemu Android, jak pokazano na poniższym zrzucie ekranu:

Wybieranie systemu Android 4.1 w Menedżerze zestawu Android SDK

Co nowego

Animacje

Działania mogą być uruchamiane przy użyciu animacji powiększenia lub niestandardowych animacji przy użyciu ActivityOptions klasy . Dostępne są następujące nowe metody obsługi tych animacji:

  • MakeScaleUpAnimation — Spowoduje to utworzenie animacji, która skaluje w górę okno działania z poziomu pozycji początkowej i rozmiaru na ekranie.
  • MakeThumbnailScaleUpAnimation — Spowoduje to utworzenie animacji, która skaluje się w górę z obrazu miniatury z określonej pozycji na ekranie.
  • MakeCustomAnimation — Spowoduje to utworzenie animacji na podstawie zasobów w aplikacji. Istnieje jedna animacja, gdy działanie zostanie otwarte, a drugie dla momentu zatrzymania działania.

Nowa TimeAnimator klasa udostępnia interfejs TimeAnimator.ITimeListener , który może powiadamiać aplikację za każdym razem, gdy zmienia się ramka w animacji. Rozważmy na przykład następującą implementację elementu TimeAnimator.ITimeListener:

class MyTimeListener : Java.Lang.Object,  TimeAnimator.ITimeListener
{
    public void OnTimeUpdate(TimeAnimator animation, long totalTime, long deltaTime)
    {
        Log.Debug("Activity1", "totalTime={0}, deltaTime={1}", totalTime, deltaTime);
    }
}

A teraz, aby użyć klasy, zostanie utworzone wystąpienie TimeAnimator , a odbiornik jest ustawiony:

var animator = new TimeAnimator();
animator.SetTimeListener(new MyTimeListener());
animator.Start();

TimeAnimator Gdy wystąpienie jest uruchomione, wywoła ITimeAnimator.ITimeListenermetodę , która następnie zarejestruje czas działania animatora i jak długo od czasu ostatniego wywołania metody.

Nawigacja stosu aplikacji

System Android 4.1 ulepsza nawigację stosu aplikacji, która została wprowadzona w systemie Android 3.0. Określając ParentName właściwość ActivityAttribute, system Android może otworzyć odpowiednie działanie nadrzędne, gdy użytkownik naciśnie przycisk Up na pasku akcji — system Android utworzy wystąpienie działania określonego ParentName przez właściwość . Dzięki temu aplikacje mogą zachować hierarchię działań, które tworzą określone zadanie.

W przypadku większości aplikacji ustawienie ParentName w działaniu jest wystarczające dla systemu Android, aby zapewnić prawidłowe zachowanie podczas nawigowania po stosie aplikacji; System Android zsyntetyzuje niezbędny stos zaplecza, tworząc serię intencji dla każdego działania nadrzędnego. Jednak ze względu na to, że jest to sztuczny stos aplikacji, każde działanie syntetyczne nie będzie miało zapisanego stanu, który miałby działanie naturalne. Aby zapewnić zapisany stan w syntetycznym działaniu nadrzędnym, działanie może zastąpić metodę OnPrepareNavigationUpTaskStack . Ta metoda odbiera TaskStackBuilder wystąpienie, które będzie zawierać kolekcję obiektów Intent, których system Android użyje do utworzenia stosu wstecznego. Działanie może modyfikować te intencje, aby podczas tworzenia działania syntetycznego otrzymywać odpowiednie informacje o stanie.

W przypadku bardziej złożonych scenariuszy istnieją nowe metody w klasie Activity, które mogą służyć do obsługi zachowania nawigacji w górę i konstruowania stosu wstecznego:

  • OnNavigateUp— Przesłaniając tę metodę, można wykonać niestandardową akcję po naciśnięciu przycisku W górę.
  • NavigateUpTo — Wywołanie tej metody spowoduje, że aplikacja przejdzie z bieżącego działania do działania określonego przez daną intencję.
  • ParentActivityIntent — Służy to do uzyskania intencji, która uruchomi działanie nadrzędne bieżącego działania.
  • ShouldUpRecreateTask — Ta metoda służy do wykonywania zapytań, jeśli należy utworzyć syntetyczny stos wsteczny, aby przejść do działania nadrzędnego. Zwraca wartość true , jeśli należy utworzyć stos syntetyczny.
  • FinishAffinity — Wywołanie tej metody spowoduje zakończenie bieżącego działania i wszystkie działania poniżej niego w bieżącym zadaniu, które mają tę samą koligację zadania.
  • OnCreateNavigateUpTaskStack — Ta metoda jest zastępowana, gdy jest konieczna pełna kontrola nad sposobem tworzenia stosu syntetycznego.

Kamera

Istnieje nowy interfejs , Camera.IAutoFocusMoveCallbackktóry może służyć do wykrywania, kiedy auto fokus został uruchomiony lub przestał się przenosić. Przykład tego nowego interfejsu można zobaczyć w następującym fragmencie kodu:

public class AutoFocusCallbackActivity : Activity, Camera.IAutoFocusCallback
{
    public void OnAutoFocus(bool success, Camera camera)
    {
        // camera is an instance of the camera service object.

        if (success)
        {
            // Auto focus was successful - do something here.
        }
        else
        {
            // Auto focus didn't happen for some reason - react to that here.
        }
    }
}

Nowa klasa MediaActionSound udostępnia zestaw interfejsów API do tworzenia dźwięków dla różnych akcji multimedialnych. Istnieje kilka akcji, które mogą wystąpić z aparatem. Są one definiowane przez wyliczenie Android.Media.MediaActionSoundType:

  • MediaActionSoundType.FocusComplete – Ten dźwięk, który jest odtwarzany po zakończeniu koncentracji uwagi.
  • MediaActionSoundType.ShutterClick – Ten dźwięk będzie odtwarzany, gdy zostanie zrobione zdjęcie obrazu.
  • MediaActionSoundType.StartVideoRecording – Ten dźwięk jest używany wskazuje początek nagrywania wideo.
  • MediaActionSoundType.StopVideoRecording – Ten dźwięk zostanie odtworzona, aby wskazać koniec nagrywania wideo.

Przykład użycia MediaActionSound klasy można zobaczyć w poniższym fragmencie kodu:

var mediaActionPlayer = new MediaActionSound();

// Preload the sound for a shutter click.
mediaActionPlayer.Load(MediaActionSoundType.ShutterClick);
var button = FindViewById<Button>(Resource.Id.MyButton);

// Play the sound on a button click.
button.Click += (sender, args) => mediaActionPlayer.Play(MediaActionSoundType.ShutterClick);

// This releases the preloaded resources. Don’t make any calls on
// mediaActionPlayer after this.
mediaActionPlayer.Release();

Łączność

Android Beam

Android Beam to technologia nfc, która umożliwia dwóm urządzeniom z systemem Android komunikowanie się ze sobą. System Android 4.1 zapewnia lepszą obsługę transferu dużych plików. W przypadku korzystania z nowej metody NfcAdapter.SetBeamPushUris() system Android przełącza się między alternatywnymi mechanizmami transportu (takimi jak Bluetooth), aby osiągnąć szybką szybkość transferu.

Odnajdywanie usług sieciowych

System Android 4.1 zawiera nowe interfejsy API do multiemisji odnajdywania usługi DNS. Dzięki temu aplikacja może wykrywać i łączyć się za pośrednictwem sieci Wi-Fi z innymi urządzeniami, takimi jak drukarki, aparaty fotograficzne i urządzenia multimedialne. Te nowe interfejsy API znajdują się w pakiecie Android.Net.Nsd .

Aby utworzyć usługę, która może być używana przez inne usługi, NsdServiceInfo klasa służy do tworzenia obiektu, który zdefiniuje właściwości usługi. Ten obiekt jest następnie udostępniany wraz NsdManager.RegisterService() z implementacją programu NsdManager.ResolveListener. Implementacje NsdManager.ResolveListener programu służą do powiadamiania o pomyślnej rejestracji i wyrejestrowania usługi.

Aby odnaleźć usługi w sieci i zaimplementować Nsd.DiscoveryListener przekazane do .NsdManager.discoverServices()

Użycie sieci

Nowa metoda ConnectivityManager.IsActiveNetworkMetered umożliwia urządzeniu sprawdzenie, czy jest podłączony do sieci taryfowej. Ta metoda może służyć do zarządzania użyciem danych przez dokładne informowanie użytkowników o kosztownych opłatach za operacje danych.

Odnajdywanie usługi bezpośredniej sieci Wi-Fi

Klasa została wprowadzona WifiP2pManager w systemie Android 4.0 do obsługi zeroconf. Zeroconf (zero konfiguracji sieci) to zestaw technik, które umożliwiają urządzeniom (komputerom, drukarkom, telefonom) automatyczne łączenie się z sieciami przy interwencji operatorów sieciowych człowieka lub specjalnych serwerów konfiguracji.

W Galaretce Bean WifiP2pManager można odnaleźć pobliskie urządzenia przy użyciu Bonjour lub Upnp. Bonjour to implementacja firmy Apple zeroconf. Upnp to zestaw protokołów sieciowych, które również obsługują zeroconf. Następujące metody dodane do elementu WiFiP2pManager w celu obsługi odnajdywania usługi Wi-Fi:

  • AddLocalService() — Ta metoda służy do ogłaszania aplikacji jako usługi za pośrednictwem sieci Wi-Fi do odnajdywania przez komunikację równorzędną.
  • AddServiceRequest( ) — ta metoda polega na wysłaniu żądania odnajdywania usługi do platformy. Służy do inicjowania odnajdywania usługi Wi-Fi.
  • SetDnsSdResponseListeners() — Ta metoda służy do rejestrowania wywołań zwrotnych w celu odebrania odpowiedzi na żądania odnajdywania z Bonjour.
  • SetUpnpServiceResponseListener() — Ta metoda służy do rejestrowania wywołań zwrotnych, które mają być wywoływane podczas odbierania odpowiedzi na żądania odnajdywania Upnp.

Dostawcy zawartości

Klasa ContentResolver otrzymała nową metodę . AcquireUnstableContentProvider Ta metoda umożliwia aplikacji uzyskanie "niestabilnego" dostawcy zawartości. Zwykle, gdy aplikacja uzyskuje dostawcę zawartości i ten dostawca zawartości ulega awarii, więc aplikacja będzie działać. W przypadku wywołania tej metody aplikacja nie ulegnie awarii, jeśli dostawca zawartości ulegnie awarii. Android.OS.DeadObjectionException Zamiast tego zostanie wyrzucony z wywołań dostawcy zawartości w celu poinformowania aplikacji, że dostawca zawartości zniknął. "Niestabilny" dostawca zawartości jest przydatny podczas interakcji z dostawcami zawartości z innych aplikacji — jest mniej prawdopodobne, że kod błędu z innej aplikacji wpłynie na inną aplikację.

Kopiowanie i wklejanie za pomocą intencji

Klasa Intent może teraz mieć ClipData skojarzony z nim obiekt za pośrednictwem Intent.ClipData właściwości . Ta metoda umożliwia przesyłanie dodatkowych danych ze schowka z intencją. Wystąpienie programu może zawierać co najmniej jeden ClipData.Itemelement ClipData . ClipData.ItemTo elementy następujących typów:

  • Tekst — jest to dowolny ciąg tekstu, HTML lub dowolny ciąg, którego format jest obsługiwany przez wbudowane zakresy stylu systemu Android.
  • Intent — dowolny Intent obiekt.
  • Uri — może to być dowolny identyfikator URI , taki jak zakładka HTTP lub identyfikator URI dostawcy zawartości.

Usługi izolowane

Izolowana usługa to usługa, która działa w ramach własnego specjalnego procesu i nie ma własnych uprawnień. Jedyną komunikacją z usługą jest uruchomienie usługi i powiązanie jej za pośrednictwem interfejsu API usługi. Istnieje możliwość zadeklarowania usługi jako izolowanej przez ustawienie właściwości IsolatedProcess="true" w ServiceAttribute tej adoracji klasy usługi.

Multimedia

Nowa Android.Media.MediaCodec klasa udostępnia interfejs API do koderów multimedialnych niskiego poziomu. Aplikacje mogą wysyłać zapytania do systemu, aby dowiedzieć się, jakie koderki niskiego poziomu są dostępne na urządzeniu.

Dodano nowe Android.Media.Audiofx.AudioEffect podklasy w celu obsługi dodatkowego przetwarzania wstępnego dźwięku na przechwyconym dźwięku:

  • Android.Media.Audiofx.AcousticEchoCanceler — Ta klasa służy do wstępnego przetwarzania dźwięku w celu usunięcia sygnału ze strony zdalnej z przechwyconego sygnału audio. Na przykład usunięcie echa z aplikacji do komunikacji głosowej.
  • Android.Media.Audiofx.AutomaticGainControl — Ta klasa służy do normalizacji przechwyconego sygnału przez zwiększenie lub obniżenie sygnału wejściowego, aby sygnał wyjściowy był stały.
  • Android.Media.Audiofx.NoiseSuppressor — Ta klasa usunie szum tła z przechwyconego sygnału.

Nie wszystkie urządzenia będą obsługiwać te efekty. Metoda AudioEffect.IsAvailable powinna być wywoływana przez aplikację, aby sprawdzić, czy efekt dźwięku, o którym mowa, jest obsługiwany na urządzeniu z uruchomioną aplikacją.

Klasa MediaPlayer obsługuje teraz odtwarzanie bez przerw w metodzie SetNextMediaPlayer() . Ta nowa metoda określa następny odtwarzacz MediaPlayer do uruchomienia po zakończeniu odtwarzania bieżącego odtwarzacza multimediów.

Następujące nowe klasy udostępniają standardowe mechanizmy i interfejs użytkownika do wybierania miejsca odtwarzania multimediów:

  • MediaRouter — Ta klasa umożliwia aplikacjom kontrolowanie routingu kanałów multimedialnych z urządzenia do głośników zewnętrznych lub innych urządzeń.
  • MediaRouterActionProvider i MediaRouteButton — te klasy pomagają zapewnić spójny interfejs użytkownika do wybierania i odtwarzania multimediów.

Notifications

System Android 4.1 umożliwia aplikacjom większą elastyczność i kontrolę dzięki wyświetlaniu powiadomień. Aplikacje mogą teraz wyświetlać większe i lepsze powiadomienia dla użytkowników. Nowa metoda NotificationBuilder.SetStyle() umożliwia ustawienie jednego z trzech nowych stylów na powiadomienia:

  • Notification.BigPictureStyle — Jest to klasa pomocnika, która będzie generować powiadomienia, które będą miały w nich obraz. Na poniższej ilustracji przedstawiono przykład powiadomienia z dużym obrazem:

Przykładowy zrzut ekranu przedstawiający powiadomienie BigPictureStyle

  • Notification.BigTextStyle — Jest to klasa pomocnika, która będzie generować powiadomienia, które będą miały wiele wierszy tekstu, takich jak poczta e-mail. Przykład tego nowego stylu powiadomień można zobaczyć na poniższym zrzucie ekranu:

Przykładowy zrzut ekranu przedstawiający powiadomienie BigTextStyle

  • Notification.InboxStyle — Jest to klasa pomocnika, która będzie generować powiadomienia zawierające listę ciągów, takich jak fragmenty z wiadomości e-mail, jak pokazano na poniższym zrzucie ekranu:

Przykładowy zrzut ekranu powiadomienia Notification.InboxStyle

Istnieje możliwość dodania do dwóch przycisków akcji w dolnej części komunikatu powiadomienia, gdy powiadomienie korzysta z normalnego lub większego stylu. Przykład tego można zobaczyć na poniższym zrzucie ekranu, na którym przyciski akcji są widoczne u dołu powiadomienia:

Przykładowy zrzut ekranu przedstawiający przyciski akcji wyświetlane poniżej komunikatu powiadomienia

Klasa Notification otrzymała nowe stałe, które umożliwiają deweloperowi określenie jednego z pięciu poziomów priorytetu dla powiadomienia. Można je ustawić w powiadomieniu przy użyciu Priority właściwości .

Uprawnienia

Dodano następujące nowe uprawnienia:

  • READ_EXTERNAL_STORAGE — Aplikacja wymaga dostępu tylko do odczytu do magazynu zewnętrznego. Obecnie wszystkie aplikacje mają domyślnie dostęp do odczytu, ale przyszłe wersje systemu Android będą wymagały jawnego żądania dostępu do odczytu przez aplikacje.
  • READ_USER_DICTIONARY — Umożliwia dostęp do odczytu do słownika wyrazów użytkownika.
  • READ_CALL_LOG — Umożliwia aplikacji uzyskiwanie informacji o połączeniach przychodzących i wychodzących przez odczytanie dziennika wywołań.
  • WRITE_CALL_LOG - Umożliwia aplikacji zapisywanie w dzienniku połączeń na telefonie.
  • WRITE_USER_DICTIONARY — Umożliwia aplikacji zapisywanie w słowniku wyrazów użytkownika.

Ważna zmiana READ_EXTERNAL_STORAGE — obecnie to uprawnienie jest automatycznie przyznawane przez system Android. Przyszłe wersje systemu Android będą wymagać, aby aplikacja zażądała tego uprawnienia przed udzieleniem uprawnienia.

Podsumowanie

W tym artykule przedstawiono niektóre z nowych interfejsów API, które są dostępne w systemie Android 4.1 (poziom 16 interfejsu API). Wyróżniono niektóre zmiany animacji i animowanie uruchomienia działania oraz wprowadzono nowe interfejsy API do odnajdywania sieci innych urządzeń przy użyciu protokołów, takich jak Bonjour lub UPnP. Wyróżniono również inne zmiany interfejsu API, takie jak możliwość wycinania i wklejania danych za pośrednictwem intencji, możliwości korzystania z izolowanych usług lub "niestabilnych" dostawców zawartości.

W tym artykule przedstawiono aktualizacje powiadomień i omówiono niektóre nowe uprawnienia wprowadzone w systemie Android 4.1