iX 10/2017
S. 80
Review
Mobile Betriebssysteme II
Aufmacherbild

Android 8 im Test

Kekssorten

Die achte Ausgabe des Google-Betriebssystems bringt neben wichtigen Neuerungen für Entwickler mehr Übersicht und längere Laufzeiten für Anwender.

Nach einem mehrmonatigen Vorschauprogramm hat Google im August eine neue Android-Version veröffentlicht. Auch sie trägt wie üblich den Namen einer Süßspeise: Oreo ist der Markenname einer Kekssorte des US-amerikanischen Unternehmens Nabisco. Ob Kunden die Marketing-Ehe positiver aufnehmen als die mit Nestlés KitKat, muss sich zeigen. Dass die Partner sie gezielt für Werbezwecke nutzen wollen, darf man voraussetzen.

Unmittelbar nach der Veröffentlichung von Android 8 stehen System-Images für den Nexus Player sowie die Google-Smartphones 5X und 6P, das Tablet Pixel C und die beiden aktuellen Modelle Pixel und Pixel XL bereit. Bis die unzähligen weiteren Hersteller ihre Produkte mit aktualisierten Versionen versorgen, dürften wieder mehrere Monate vergehen. Auch an der traurigen Tradition, dass nicht alle aktuellen Geräte ein Update erhalten, ändert sich zunächst nichts.

Jedoch hat Google im Mai 2017 auf seinem Entwickler-Blog mit Project Treble eine modulare Basis für sein Betriebssystem vorgestellt, die das Android-Framework unabhängig von den hardwarenahen Softwarekomponenten der SoC-Hersteller macht (siehe „Alle Links“). Ab Oreo kommuniziert das Android-Framework mit der untersten Geräteschicht ausschließlich über eine stabile, wohldefinierte und testbare Schnittstelle. Allerdings müssen die Geräte sie natürlich zunächst einmal erhalten – mit dem Upgrade auf Oreo. Hinzu kommt, dass das Aktualisieren der hardwarenahen Software nur einer von mehreren Schritten ist. Hersteller und Provider steuern üblicherweise ebenfalls Komponenten bei, die sie anpassen müssen. Dennoch ist Treble eine willkommene Neuerung. Wie viel sie bringt, kann leider erst das nächste Update zeigen.

Benachrichtigungen im Launcher

Android 8 umfasst eine ganze Reihe von Neuerungen, dank derer Nutzer effizienter mit Benachrichtigungen umgehen können sollen. Beispielsweise zeigt das System sie nun durch langes Antippen des App-Symbols an, sofern der Launcher die Funktion unterstützt.

Benachrichtigungen empfängt der Nutzer nun direkt über das App-Symbol (Abb. 1).

Benachrichtigungskanäle ordnen jede Benachrichtigung einer Kategorie zu. Social-Media-Apps könnten sie bei eingehenden Nachrichten anhand des Absenders einem der vorher angelegten Kanäle „Enge Freunde“, „Familie“ oder „Bekannte“ zuordnen. Aktuelle Ereignisse lassen sich ebenfalls einfach in Kategorien unterteilen: Politik, Kultur, Wissenschaft. Was ein Kanal inhaltlich bedeutet, gibt das System nicht vor. Allerdings gibt es keine fertigen Kanäle, Apps erstellen sie nach Belieben selbst. Dabei können sie angeben, für wie wichtig sie Benachrichtigungen in einem Kanal halten. Der Anwender kann letztere Vorgaben aber jederzeit ändern.

Apps mit targetSdkVersion >= 26 müssen mindestens einen Kanal implementieren und sicherstellen, dass sie jede Benachrichtigung einem Kanal zuordnen. Andernfalls zeigt Android sie nicht an. Zum Debugging kann man in den Entwickleroptionen die Funktion „Warnungen für Benachrichtigungskanäle einblenden“ aktivieren (siehe Abbildung 2). In diesem Fall erscheint bei dem Versuch, eine Benachrichtigung ohne Kanalzuordnung anzuzeigen, ein entsprechender Hinweis.

Fürs Debugging während des Programmierens gibt es eine praktische Warnfunktion in den Entwickleroptionen (Abb. 2).

Benachrichtigungen von Apps für ältere Android-Versionen, die aber unter Oreo laufen, gehören übrigens automatisch zu einem Standardkanal. Dessen ID ist in der Konstante NotificationChannel.DEFAULT_CHANNEL_ID definiert. Apps dürfen letztere allerdings nicht als ID für einen ihrer Kanäle nutzen. Einen solchen Versuch bestraft das System mit einer IllegalArgumentException. Listing 1 zeigt, wie man einen Benachrichtigungskanal anlegt. Es gehört zur App NotificationChannelDemo, die auf dem Listing-Server bereitsteht.

Notification Manager

Listing 1: Anlegen eines Benachrichtigungskanals

final NotificationManager nm = 
        getSystemService(NotificationManager.class);
NotificationChannel channel = 
        new NotificationChannel(CHANNEL_ID,
            getString(R.string.channelName),
            NotificationManager.IMPORTANCE_HIGH);
channel.setDescription(getString(R.string.channelDescr));
nm.createNotificationChannel(channel);

Für das Erstellen, Senden und Verwalten von Benachrichtigungen ist seit jeher der Notification Manager verantwortlich. getSystemService(NotificationManager.class) liefert die Referenz auf ein solches Objekt. Um einen Kanal zu erzeugen, muss man als Erstes eine NotificationChannel-Instanz erzeugen. Channel-ID, Name und Wichtigkeit sind Pflicht. Das Setzen einer Kanalbeschreibung mit setDescription() ist empfehlenswert. Ferner lassen sich die Benachrichtigungsleuchten (enableLights() und setLightColor()) sowie der Vibrationsmotor (enableVibration() und setVibrationPattern()) konfigurieren. Weitere Optionen sind: