Funkce Bean

Tento dokument bude poskytovat základní přehled o nových funkcích pro vývojáře, které byly představeny v Androidu 4.1. Mezi tyto funkce patří: rozšířená oznámení, aktualizace Androidu o 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 (ÚROVEŇ ROZHRANÍ API 16), označované také jako "Užan Bean", byl 9. července 2012 vydán. Tento článek obsahuje základní úvod k některým novým funkcím v Androidu 4.1 pro vývojáře používající Xamarin.Android. Mezi tyto nové funkce patří vylepšení animací pro spuštění aktivity, nové zvuky pro fotoaparát a vylepšená podpora navigace v zásobníku aplikací. Teď je možné vyjmout a vložit se záměry.

Stabilita aplikací pro Android je vylepšená a umožňuje izolovat závislost na nestabilních poskytovatelích obsahu. Služby mohou být také izolované tak, aby byly přístupné pouze aktivitou, která je s jeho pomocí s zahájila.

Byla přidána podpora zjišťování síťových služeb pomocí služeb Bonjour, UPnP nebo dns vícesměrového vysílání. Pro bohatší oznámení, která mají formátovaný text, tlačítka akcí a velké obrázky, je teď možné.

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

Požadavky

K vývoji aplikací Xamarin.Android pomocí Funkce Xamarin Bean je nutné nainstalovat Xamarin.Android 4.2.6 nebo novější a Android 4.1 (api úrovně 16) prostřednictvím Správce sady Android SDK, jak je znázorněno na následujícím obrázku:

Výběr Androidu 4.1 v Správce sady Android SDK

Co je nového

Animace

Aktivity je možné spustit 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á na obrazovce škáluje okno aktivity z počáteční pozice a velikosti.
  • MakeThumbnailScaleUpAnimation – Vytvoří se animace, která škáluje z miniatury obrázku ze zadané pozice na obrazovce.
  • MakeCustomAnimation – Tím se vytvoří animace z prostředků v aplikaci. Při otevření aktivity je k dispozici jedna animace a druhá animace pro zastavení aktivity.

Nová třída poskytuje rozhraní, které může aplikaci oznámit pokaždé, když se v animaci TimeAnimatorTimeAnimator.ITimeListener změní snímek. 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 a TimeAnimator naslouchací proces se nastaví:

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

Když je instance spuštěná, vyvolá metodu , která pak zachytá dobu, po kterou TimeAnimator je animátor spuštěný a jak dlouho byla od posledního vyvolání ITimeAnimator.ITimeListener metody.

Navigace v zásobníku aplikací

Android 4.1 vylepšuje navigaci v zásobníku aplikací, která byla zavedena v Androidu 3.0. Když uživatel zadá vlastnost objektu , android může otevřít správnou nadřazenou aktivitu, když na panelu akcí stiskne tlačítko Nahoru – Android vytvoří instanci aktivity určené ParentNameActivityAttributeParentNameParentName vlastností . To umožňuje aplikacím zachovat hierarchii aktivit, které tvoří danou úlohu.

U většiny aplikací, které nastavují aktivitu , je dostatečný počet informací, aby Android poskytoval správné chování pro ParentName navigaci v zásobníku aplikací. Android syntetizuje potřebný zásobník zpět 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ých aplikací, nebude mít každá syntetická aktivita uložený stav, který by mohla mít přirozená aktivita. Aby bylo možné poskytnout uložený stav syntetické nadřazené aktivitě, může aktivita přepsat OnPrepareNavigationUpTaskStack metodu . Tato metoda obdrží instanci, která bude mít kolekci objektů záměru, kterou Android použije TaskStackBuilder k vytvoření zásobníku zpět. Aktivita může tyto záměry upravit tak, aby při vytváření syntetické aktivity obdržela správné informace o stavu.

U složitějších scénářů existují nové metody třídy Activity, které lze použít ke zpracování chování navigace Nahoru a vytvoření zásobníku zpět:

  • OnNavigateUp– Přepsáním této metody je možné provést vlastní OnNavigateUp 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í, zda musí být vytvořen syntetické zásobníku back-stack k přechodu na nadřazenou aktivitu. Vrátí true hodnotu , pokud musí být vytvořený syntetický zásobník.
  • FinishAffinity – Voláním této metody se dokončí aktuální aktivita a všechny aktivity pod ní v aktuálním úkolu, které mají stejné spřažení úkolů.
  • OnCreateNavigateUpTaskStack – Tato metoda se přepíše, když je potřeba mít úplnou kontrolu nad tím, jak se syntetický zásobník vytvoří.

Camera

K dispozici je nové rozhraní , které lze použít k detekci, kdy se automatické Camera.IAutoFocusMoveCallback zaměření zahájilo nebo přestalo 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 poskytuje sadu rozhraní API pro MediaActionSound vytváření zvuků pro různé mediální akce. U fotoaparátu může dojít k několika akcím, které jsou definovány ve výčtu Android.Media.MediaActionSoundType :

  • MediaActionSoundType.FocusComplete – Tento zvuk se přehrá, když se fokus dokončí.
  • MediaActionSoundType.ShutterClick – Tento zvuk se přehrá, když se pohraje obrázek.
  • MediaActionSoundType.StartVideoRecording – Tento zvuk označuje začátek nahrávání videa.
  • MediaActionSoundType.StopVideoRecording – Tento zvuk se přehrá, aby indikuje konec nahrávání videa.

Příklad použití třídy můžete vidět MediaActionSound 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 Samsung je technologie založená na TECHNOLOGII NFC, která umožňuje vzájemnou komunikaci dvou zařízení s Androidem. Android 4.1 poskytuje lepší podporu pro přenos velkých souborů. Při použití nové metody android přepne mezi alternativními mechanismy přenosu (například Bluetooth), aby se NfcAdapter.SetBeamPushUris() dosáhlo rychlé rychlosti přenosu.

Network Services zjišťování

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

K vytvoření služby, která může být využívána jinými službami, se třída používá k vytvoření objektu, který bude NsdServiceInfo definovat vlastnosti služby. Tento objekt je pak k NsdManager.RegisterService() dispozici spolu s implementací NsdManager.ResolveListener . Implementace se používají k oznámení úspěšné registrace a zrušení NsdManager.ResolveListener registrace služby.

Chcete-li zjistit služby v síti a implementaci Nsd.DiscoveryListener předané do NsdManager.discoverServices() .

Využití sítě

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

Zjišťování přímých služeb WiFi

Třída WifiP2pManager byla představena v Androidu 4.0, aby WifiP2pManager. Zeroconf (zero configuration networking) je sada technik, které umožňují zařízením (počítačům, tiskárnám, telefonům) automaticky se připojovat k sítím s pomocí lidských síťových operátorů nebo speciálních konfiguračních serverů.

V ZařízeníCheme Bean může zjišťovat zařízení v okolí WifiP2pManager pomocí WifiP2pManager nebo Upnpu. Bonjour je implementace zeroconf společnosti Apple. Upnp je sada síťových protokolů, které také podporují zeroconf. Následující metody přidané do pro WiFiP2pManager podporu zjišťování Wi-Fi služby:

  • AddLocalService() – Tato metoda oznamuje aplikaci jako službu přes Wi-Fi pro zjišťování partnerskými partnery.
  • AddServiceRequest( ) – Tato metoda je odeslání žádosti o zjišťování služby do architektury. Slouží k inicializaci zjišťování Wi-Fi služby.
  • SetDnsSdResponseListeners() – Tato metoda slouží k registraci zpětných volání, která se mají vyvolat při přijetí odpovědi na žádosti o zjišťování od Bonjouru.
  • SetUpnpServiceResponseListener() – Tato metoda slouží k registraci zpětných volání, která se mají vyvolat při přijetí odpovědi na žádosti o zjišťování Upnp.

Poskytovatelé obsahu

Třída ContentResolver obdržela novou metodu AcquireUnstableContentProvider . Tato metoda umožňuje aplikaci získat "nestabilního" zprostředkovatele obsahu. Za normálních okolností, když aplikace získá poskytovatele obsahu a tento poskytovatel obsahu se zhroutí, stejně jako aplikace. Při volání této metody aplikace nehavaruje, pokud dojde k chybě poskytovatele obsahu. Místo toho bude vyvolána z volání u poskytovatele obsahu, aby aplikace informovala o tom, že poskytovatel obsahu Android.OS.DeadObjectionException se odešel. "Nestabilní" poskytovatel obsahu je užitečný při interakci se zprostředkovateli obsahu z jiných aplikací – je méně pravděpodobné, že chybný kód 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 objekt přidružený prostřednictvím vlastnosti ClipDataIntent.ClipData . Tato metoda umožňuje přenášení dalších dat ze schránky se záměrem . Instance může ClipData obsahovat jeden nebo více ClipData.Item . ClipData.Itemjsou položky následujících typů:

  • Text – jedná se o libovolný textový řetězec, HTML nebo libovolný řetězec, jehož formát podporuje integrovaný styl Androidu.
  • Intent – libovolný objekt
  • Identifikátor URI – může to být libovolný identifikátor URI, jako je například záložka http nebo identifikátor URI poskytovatele obsahu.

Izolované služby

Izolovaná služba je služba, která běží v rámci svého vlastního zvláštního procesu a nemá žádná vlastní oprávnění. Jediná komunikace se službou je spuštění služby a vazba na ni prostřednictvím rozhraní API služby. Je možné deklarovat službu jako izolovanou nastavením vlastnosti IsolatedProcess="true" v, která je doplňkem ServiceAttribute třídy služby.

Média

Nová Android.Media.MediaCodec Třída poskytuje rozhraní API pro kodeky médií nízké úrovně. Aplikace mohou v systému zadat dotaz na informace o tom, jaké kodeky nízké úrovně jsou v zařízení k dispozici.

Nové Android.Media.Audiofx.AudioEffect podtřídy byly přidány pro podporu dalšího předběžného zpracování zvuku na zachyceném zvukovém zařízení:

  • Android.Media.Audiofx.AcousticEchoCanceler – Tato třída se používá pro předzpracování zvukového zařízení k odebrání signálu ze vzdálené strany ze zachyceného zvukového signálu. Například odebrání ozvěny z aplikace hlasové komunikace.
  • Android.Media.Audiofx.AutomaticGainControl – Tato třída se používá k normalizaci zachyceného signálu tím, že se zvyšuje nebo snižuje vstupní signál, aby výstupní signál byl konstantní.
  • Android.Media.Audiofx.NoiseSuppressor – Tato třída odstraní z zachyceného signálu šum na pozadí.

Tato efekt nebude podporovat všechna zařízení. Metoda AudioEffect.IsAvailable by měla být volána aplikací, aby bylo možné zjistit, zda je na zařízení, na kterém je spuštěná aplikace, podporován zvukový efekt.

MediaPlayerTřída teď podporuje přehrávání gapless s SetNextMediaPlayer() metodou. Tato nová metoda určuje další MediaPlayer, který se spustí, 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, kde se budou přehrávat média:

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

Oznámení

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

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

Příklad snímku obrazovky oznámení BigPictureStyle

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

Příklad snímku obrazovky oznámení BigTextStyle

  • Notification.InboxStyle – Toto je pomocná třída, která bude generovat oznámení obsahující seznam řetězců, jako jsou například fragmenty kódu z e-mailové zprávy, jak je znázorněno na tomto snímku obrazovky:

Příklad snímku obrazovky oznámení. InboxStyle

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

Ukázkový snímek tlačítek akcí zobrazených pod oznamovací zprávou

NotificationTřída obdržela nové konstanty, které vývojářům umožňují zadat jednu z pěti úrovní priority pro oznámení. Ty lze 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. Ve výchozím nastavení mají všechny aplikace oprávnění ke čtení, ale budoucí verze Androidu budou vyžadovat, aby aplikace explicitně požadovaly přístup pro čtení.
  • READ_USER_DICTIONARY – Povolí přístup pro čtení ke slovníku slov uživatele.
  • READ_CALL_LOG – Umožňuje aplikaci získat informace o příchozích a odchozích voláních, a to čtením protokolu volání.
  • WRITE_CALL_LOG – Povolí aplikaci zapisovat do protokolu volání na telefonu.
  • WRITE_USER_DICTIONARY – Povolí aplikaci zapisovat do slovníku slov uživatele.

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

Souhrn

Tento článek představil některé nové rozhraní API, které jsou k dispozici v Androidu 4,1 (rozhraní API úrovně 16). Zdůraznili jsme některé změny pro animace a animaci spuštění aktivity a zavedli jsme nové rozhraní API pro zjišťování sítě dalších zařízení pomocí protokolů, jako je Bonjour nebo UPnP. Ostatní změny rozhraní API byly také zvýrazněny, například schopnost vyjímat a vkládat data prostřednictvím záměrů, možnost používat izolované služby nebo "nestabilní" poskytovatelé obsahu.

V tomto článku se pak provedlo zavedení aktualizací oznámení a popisujeme některá z nových oprávnění, která byla představena s Androidem 4,1.