2014-10-11

Benachrichtigungen auf Wearables

In meinem vorherigen Post hatte ich Ihnen berichtet, dass Min Time nun Benachrichtigungen zum zeitlichen Verlauf eines Talks ausgibt, und dass diese auch auf Android Wear-Geräten erscheinen. Letzteres ist grundsätzlich unspektakulär, weil es – eigentlich – von Haus aus geschieht. Natürlich wäre dies nicht bloggenswert, wenn es nicht ein entscheidendes Caveat gäbe. Hierzu ein Beispiel:
1:  NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(  
2:      context).setPriority(NotificationCompat.PRIORITY_HIGH)  
3:      .setContentTitle(context.getString(R.string.app_name))  
4:      .setContentText(str)  
5:      .setOngoing(true)  
6:      .setWhen(resumed)  
7:      .setSmallIcon(R.drawable.ic_launcher_mintime)  
8:      .setContentIntent(notificationClickedIntent);  
9:  NotificationManagerCompat notificationManager = NotificationManagerCompat  
10:      .from(context);  
11:  notificationManager.notify(CountdownActivity.NOTIFICATION_ID,  
12:      notificationBuilder.build());  
Fällt Ihnen an diesem Stück Quelltext irgendetwas auf? Wer Android kennt, wundert sich vielleicht, dass nicht mehr der Builder aus der Android-Standardbibliothek verwendet wird. sondern NotificationCompat.Builder. Das ist Absicht. Tatsächlich fordert Google in der Dokumentation ausdrücklich dazu auf. Im Klartext bedeutet dies, dass man die Bibliothek android-support-v4.jar einbinden muss. Obiger Code erzeugt tatsächlich eine Benachrichtigung; dummerweise erscheint die aber nicht auf einem Wearable. Den Grund habe ich nach langer Suche in dem Posting How to Create a Custom Ongoing Notification on Android Wear von Carlos Hwa gefunden. Wohlgemerkt, Google schreibt diesbezüglich (Stand 11.10.14) nichts:
Screenshot der Seite http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html
Wenn man es weiß, ist die Lösung einfach. Aus meinem Quelltextfragment einfach setOngoing() entfernen, und die Benachrichtigung erscheint wie erwartet auf der Uhr. *AUTSCH* Die Nutzung des Kompatibilitätspakets verläuft zum Glück schmerzfrei. Dass die Größe der App zunimmt (von 0,11 MB auf 0,37 MB im Falle von Min Time) ist unschön, aber vor dem Hintergrund aktueller Bandbreiten sicher zu verschmerzen. Übrigens hatte die Integration des Jars eine Zeitlang den Effekt, dass eine App angeblich für viele (> 30) Sprachen lokalisiert war, obwohl es in der eigentlichen Anwendung gar keine Vorkehrungen hierfür gab (wohl aber im Jar). Das scheint aber behoben worden zu sein.

No comments:

Post a Comment