Funkce Jelly Bean

Tento dokument poskytuje obecný přehled nových funkcí pro vývojáře, kteří byli představeni v Androidu 4.1. Mezi tyto funkce patří: rozšířená oznámení, aktualizace android Beam pro sdílení velkých souborů, aktualizace multimédií, zjišťování sítě peer-to-peer, animace, nová oprávnění.

Přehled

Android 4.1 (API Level 16), označovaný také jako "Jelly Bean", byl vydán 9. července 2012. Tento článek obsahuje základní úvod k některým novým funkcím Androidu 4.1 pro vývojáře, kteří používají Xamarin.Android. Některé z těchto nových funkcí jsou vylepšení animací pro spuštění aktivity, nových zvuků pro kameru a vylepšená podpora pro navigaci v zásobníku aplikací. Nyní je možné vyjmout a vložit záměry.

Stabilita aplikací pro Android je vylepšena schopnost izolovat závislost na nestabilních poskytovatelích obsahu. Služby mohou být také izolované, aby byly přístupné pouze aktivitou, která je spustila.

Byla přidána podpora pro zjišťování síťových služeb pomocí služeb Bonjour, UPnP nebo vícesměrových služeb založených na DNS. Teď je možné, že bohatší oznámení mají formátovaný text, tlačítka akcí a velké obrázky.

Nakonec bylo v Androidu 4.1 přidáno několik nových oprávnění.

Požadavky

Pokud chcete vyvíjet aplikace Xamarin.Android pomocí Jelly Bean, musíte nainstalovat Xamarin.Android 4.2.6 nebo novější a Android 4.1 (ÚROVEŇ ROZHRANÍ API 16), jak je znázorněno na následujícím snímku obrazovky:

Selecting Android 4.1 in the Android SDK Manager

Co je nového

Animace

Aktivity se můžou spustit buď pomocí animací přiblížení, nebo vlastních animací pomocí ActivityOptions třídy. Pro podporu těchto animací jsou k dispozici následující nové metody:

  • MakeScaleUpAnimation – Tím se vytvoří animace, která vertikálně navýšit kapacitu okna aktivity z pozice zahájení a velikosti na obrazovce.
  • MakeThumbnailScaleUpAnimation – Tím se vytvoří animace, která se zvětšuje z miniatury obrázku ze zadané pozice na obrazovce.
  • MakeCustomAnimation – Vytvoří animaci z prostředků v aplikaci. Existuje jedna animace, kdy se aktivita otevře a druhá pro ukončení aktivity.

Nová TimeAnimator třída poskytuje rozhraní TimeAnimator.ITimeListener , které může aplikaci oznámit pokaždé, když se v animaci změní rámec. Představte si například následující implementaci 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 teď, když chcete použít třídu, vytvoří se instance TimeAnimator a naslouchací proces je nastavený:

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

TimeAnimator Když je instance spuštěná, vyvolá ITimeAnimator.ITimeListenerse , což pak zaznamená, jak dlouho byl animátor spuštěn a jak dlouho byl od posledního vyvolání metody.

Navigace v zásobníku aplikací

Android 4.1 zlepšuje navigaci v zásobníku aplikací, která byla zavedena v Androidu 3.0. ParentName Zadáním vlastnosti může ActivityAttributeAndroid otevřít správnou nadřazenou aktivitu, když uživatel stiskne tlačítko Nahoru na panelu akcí – Android vytvoří instanci aktivity určené vlastnostíParentName. To umožňuje aplikacím zachovat hierarchii aktivit, které tvoří daný úkol.

U většiny aplikací, které nastavují ParentName aktivitu, jsou dostatečné informace pro Android, aby poskytoval správné chování pro navigaci v zásobníku aplikací; Android syntetizuje potřebný zpětný zásobník vytvořením řady záměrů pro každou nadřazenou aktivitu. Vzhledem k tomu, že se jedná o zásobník umělé aplikace, každá syntetická aktivita nebude mít uložený stav, který by měla přirozená aktivita. Pokud chcete poskytnout uložený stav syntetické nadřazené aktivitě, může aktivita přepsat metodu OnPrepareNavigationUpTaskStack . Tato metoda obdrží TaskStackBuilder instanci, která bude mít kolekci objektů Intent, které Android použije k vytvoření back stacku. Aktivita může tyto záměry upravit tak, aby při vytváření syntetické aktivity dostávala správné informace o stavu.

V případě složitějších scénářů existují nové metody třídy Aktivity, které lze použít ke zpracování chování navigace up a vytvoření back stacku:

  • OnNavigateUp – Přepsáním této metody je možné provést vlastní akci při stisknutí tlačítka Nahoru .
  • NavigateUpTo – Volání této metody způsobí, že aplikace přejde z aktuální aktivity na aktivitu určenou daným záměrem.
  • ParentActivityIntent – Slouží k získání záměru, který spustí nadřazenou aktivitu aktuální aktivity.
  • ShouldUpRecreateTask – Tato metoda se používá k dotazování, pokud je nutné vytvořit syntetické back stack, aby se přecházely k nadřazené aktivitě. Vrátí true , pokud musí být vytvořen syntetický zásobník.
  • FinishAffinity – Volání této metody dokončí aktuální aktivitu a všechny aktivity pod ním v aktuálním úkolu, které mají stejné spřažení úkolů.
  • OnCreateNavigateUpTaskStack – Tato metoda je přepsána, když je nutné mít úplnou kontrolu nad tím, jak je syntetická sada vytvořena.

Kamera

K dispozici je nové rozhraní, které lze použít ke zjištění, Camera.IAutoFocusMoveCallbackkdy se automatické fokus spustil nebo přestal přesouvat. Příklad tohoto nového rozhraní je vidět v následujícím fragmentu kódu:

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.
        }
    }
}

Nová třída MediaActionSound poskytuje sadu rozhraní API pro vytváření zvuků pro různé mediální akce. S kamerou může dojít k několika akcím, které jsou definovány výčtem Android.Media.MediaActionSoundType:

  • MediaActionSoundType.FocusComplete – Tento zvuk se přehrával při dokončení zaměření.
  • MediaActionSoundType.ShutterClick – Tento zvuk se přehraje, když se pořídí obrázek na obrázku.
  • MediaActionSoundType.StartVideoRecording – Tento zvuk se používá jako začátek nahrávání videa.
  • MediaActionSoundType.StopVideoRecording – Tento zvuk se přehraje a označí konec nahrávání videa.

Příklad použití MediaActionSound třídy je vidět v následujícím fragmentu kódu:

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();

Připojení

Android Beam

Android Beam je technologie založená na NFC, která umožňuje vzájemné komunikaci dvou zařízení s Androidem. Android 4.1 poskytuje lepší podporu pro přenos velkých souborů. Při použití nové metody NfcAdapter.SetBeamPushUris() Android se přepne mezi alternativními transportovými mechanismy (například Bluetooth), aby se dosáhlo rychlé rychlosti přenosu.

Zjišťování síťových služeb

Android 4.1 obsahuje nové rozhraní API pro zjišťování služby založené na DNS vícesměrového vysílání. To umožňuje aplikaci zjišťovat a připojovat se přes Wi-Fi k jiným zařízením, jako jsou tiskárny, kamery a mediální zařízení. Toto nové rozhraní API je v Android.Net.Nsd balíčku.

Chcete-li vytvořit službu, která může být spotřebována jinými službami, NsdServiceInfo třída se používá k vytvoření objektu, který definuje vlastnosti služby. Tento objekt je pak poskytován NsdManager.RegisterService() spolu s implementací NsdManager.ResolveListener. NsdManager.ResolveListener Implementace se používají k oznámení o úspěšné registraci a zrušení registrace služby.

Zjišťování služeb v síti a implementace předávaných Nsd.DiscoveryListener do NsdManager.discoverServices().

Využití sítě

Nová metoda umožňuje zařízení zkontrolovat, ConnectivityManager.IsActiveNetworkMetered jestli je připojená k síti s měřením dat. Tuto metodu lze použít ke správě využití dat tím, že přesně informuje uživatele, že se můžou účtovat nákladné poplatky za operace s daty.

Zjišťování služby WiFi Direct

Třída WifiP2pManager byla představena v Androidu 4.0 pro podporu zeroconf. Zeroconf (nula konfigurační sítě) je sada technik, které umožňují zařízením (počítačům, tiskárnám, telefonům) připojit se k sítím automaticky pomocí zásahu operátorů lidské sítě nebo speciálních konfiguračních serverů.

V Jelly Beanu WifiP2pManager můžete vyhledat zařízení v okolí pomocí Bonjour nebo Upnp. Bonjour je implementace nulaconf společnosti Apple. Upnp je sada síťových protokolů, které také podporují zeroconf. Do podpory zjišťování wi-fi služeb se přidaly WiFiP2pManager následující metody:

  • AddLocalService() – Tato metoda se používá k oznámení aplikace jako služby přes Wi-Fi pro zjišťování partnerskými partnery.
  • AddServiceRequest( ) – Tato metoda je odeslat požadavek na zjišťování služby do architektury. Slouží k inicializaci zjišťování služby Wi-Fi.
  • SetDnsSdResponseListeners() – Tato metoda se používá k registraci zpětného volání, které se mají vyvolat při přijetí odpovědi na žádosti o zjišťování z Bonjour.
  • SetUpnpServiceResponseListener() – Tato metoda se používá k registraci zpětných volání, které se mají vyvolat při přijetí odpovědi na požadavky zjišťování Upnp.

Poskytovatelé obsahu

Třída ContentResolver přijala novou metodu, AcquireUnstableContentProvider. Tato metoda umožňuje aplikaci získat "nestabilního" poskytovatele obsahu. Za normálních okolností, když aplikace získá zprostředkovatele obsahu a tento poskytovatel obsahu se chybově ukončí, takže aplikace. Při volání této metody nebude aplikace chybově ukončena, pokud dojde k chybě poskytovatele obsahu. Android.OS.DeadObjectionException Místo toho bude vyvolán volání poskytovatele obsahu, aby informovala aplikaci, že poskytovatel obsahu se odpojil. "Nestabilní" poskytovatel obsahu je užitečný při interakci s poskytovateli obsahu z jiných aplikací – je méně pravděpodobné, že kód chyby z jiné aplikace ovlivní jinou aplikaci.

Kopírování a vkládání se záměry

Třída Intent teď může mít ClipData přidružený objekt prostřednictvím Intent.ClipData vlastnosti. Tato metoda umožňuje přenést další data ze schránky se záměrem. Instance ClipData může obsahovat jednu nebo více ClipData.Item. ClipData.Itemjsou položky následujících typů:

  • Text – Jedná se o libovolný řetězec textu, buď HTML, nebo jakýkoli řetězec, jehož formát je podporován integrovaným stylem Androidu.
  • Intent – Libovolný Intent objekt.
  • Uri – Může to být libovolný identifikátor URI, například záložka HTTP nebo identifikátor URI pro poskytovatele obsahu.

Izolované služby

Izolovaná služba je služba, která běží ve vlastním speciálním procesu a nemá vlastní oprávnění. Jedinou komunikací se službou je spuštění služby a vazba na ni prostřednictvím rozhraní API služby. Službu je možné deklarovat jako izolovanou nastavením vlastnosti IsolatedProcess="true" v ServiceAttribute této třídě služby.

Média

Nová Android.Media.MediaCodec třída poskytuje rozhraní API pro kodeky médií nízké úrovně. Aplikace se můžou do systému dotazovat a zjistit, jaké kodeky nízké úrovně jsou v zařízení k dispozici.

Byly přidány nové Android.Media.Audiofx.AudioEffect podtřídy pro podporu dalšího předběžného zpracování zvuku u zachyceného zvuku:

  • Android.Media.Audiofx.AcousticEchoCanceler – Tato třída slouží k předběžnému zpracování zvuku k odebrání signálu ze vzdálené strany z zachyceného zvukového signálu. Například odebrání ozvěny z hlasové komunikační aplikace.
  • Android.Media.Audiofx.AutomaticGainControl – Tato třída slouží k normalizaci zachyceného signálu zvýšením nebo snížením vstupního signálu tak, aby výstupní signál byl konstantní.
  • Android.Media.Audiofx.NoiseSuppressor – Tato třída odebere šum na pozadí z zachyceného signálu.

Tyto efekty nebudou podporovat všechna zařízení. Metoda AudioEffect.IsAvailable by měla být volána aplikací, aby se zjistilo, jestli je na zařízení, na kterém je spuštěná aplikace, podporovaný zvukový efekt.

Třída MediaPlayer teď podporuje bez mezery přehrávání pomocí SetNextMediaPlayer() metody. Tato nová metoda určuje další MediaPlayer, který se má spustit, když aktuální přehrávač médií dokončí přehrávání.

Následující nové třídy poskytují standardní mechanismy a uživatelské rozhraní pro výběr místa přehrávání média:

  • MediaRouter – Tato třída umožňuje aplikacím řídit směrování mediálních kanálů ze zařízení do externích reproduktorů nebo jiných zařízení.
  • MediaRouterActionProvider a MediaRouteButton – Tyto třídy pomáhají poskytovat konzistentní uživatelské rozhraní pro výběr a přehrávání médií.

Notifications

Android 4.1 umožňuje aplikacím větší flexibilitu a kontrolu nad zobrazováním oznámení. Aplikace teď můžou uživatelům zobrazovat větší a lepší oznámení. Nová metoda umožňuje NotificationBuilder.SetStyle() nastavit jeden z nových tří nových stylů pro oznámení:

  • Notification.BigPictureStyle – Toto je pomocná třída, která vygeneruje oznámení, která budou mít na obrázku. Následující obrázek ukazuje příklad oznámení s velkým obrázkem:

Example screenshot of a BigPictureStyle notification

  • Notification.BigTextStyle – Toto je pomocná třída, která vygeneruje oznámení, která budou mít více řádků textu, například e-mail. Příklad tohoto nového stylu oznámení můžete vidět na následujícím snímku obrazovky:

Example screenshot of a BigTextStyle notification

  • Notification.InboxStyle – Jedná se o pomocnou třídu, která vygeneruje oznámení obsahující seznam řetězců, jako jsou fragmenty kódu z e-mailové zprávy, jak je znázorněno na tomto snímku obrazovky:

Example screenshot of a Notification.InboxStyle notification

Když oznámení používá normální nebo větší styl, je možné přidat až dvě tlačítka akcí v dolní části zprávy s oznámením. Příklad je vidět na následujícím snímku obrazovky, kde jsou tlačítka akcí viditelná v dolní části oznámení:

Example screenshot of action buttons displayed below a notification message

Třída Notification obdržela nové konstanty, které vývojářům umožňují zadat jednu z pěti úrovní priority pro oznámení. Můžete je nastavit u oznámení pomocí Priority vlastnosti.

Oprávnění

Byla přidána následující nová oprávnění:

  • READ_EXTERNAL_STORAGE – Aplikace vyžaduje přístup jen pro čtení k externímu úložišti. V současné době mají všechny aplikace ve výchozím nastavení přístup pro čtení, ale budoucí verze Androidu budou vyžadovat, aby aplikace explicitně požadovaly přístup pro čtení.
  • READ_USER_DICTIONARY - Umožňuje přístup pro čtení do slovníku slov uživatele.
  • READ_CALL_LOG - Umožňuje aplikaci získat informace o příchozích a odchozích voláních čtením protokolu volání.
  • WRITE_CALL_LOG - Umožňuje aplikaci zapisovat do protokolu volání v telefonu.
  • WRITE_USER_DICTIONARY - Umožňuje aplikaci psát do slovníku slov uživatele.

Důležitá změna v poznámce READ_EXTERNAL_STORAGE – v současné době je toto oprávnění automaticky uděleno Androidem. Budoucí verze Androidu budou před udělením oprávnění vyžadovat aplikaci, která o toto oprávnění požádá.

Shrnutí

Tento článek představil některé nové rozhraní API, které jsou dostupné v Androidu 4.1 (úroveň rozhraní API 16). Zvýraznila některé změny animace a animace spuštění aktivity a představila nové rozhraní API pro zjišťování sítí jiných zařízení pomocí protokolů, jako jsou Bonjour nebo UPnP. Kromě toho byly zvýrazněny i další změny rozhraní API, jako je možnost vyjmout a vložit data prostřednictvím záměrů, možnost používat izolované služby nebo "nestabilní" poskytovatele obsahu.

V tomto článku jsme se seznámili s aktualizacemi oznámení a seznámili jsme se s některými novými oprávněními zavedenými v Androidu 4.1.