Warum Android doch kein Force Touch kann

Wissen | Hintergrund

Im Rahmen der Berichterstattung um Apples Force Touch tauchte der Hinweis auf, dass Android das feste Fingerdrücken schon seit Jahren beherrsche. Doch in Wirklichkeit unterstützt Android diese Technik bestenfalls rudimentär. Eine Bestandsaufnahme und Force-Touch-Praxis unter Android.

Im Rahmen der Berichterstattung um Apples Force Touch tauchte der Hinweis auf, dass Android das feste Fingerdrücken schon seit Jahren beherrsche. Doch in Wirklichkeit unterstützt Android diese Technik bestenfalls rudimentär. Eine Bestandsaufnahme und Force-Touch-Praxis unter Android.

Force Touch – das ist einer der Namen der Technik, bei der ein Touchscreen die Intensität des Fingerdrucks erkennt und daraufhin unterschiedliche Aktionen auslöst. Als erstes Smartphone kam das iPhone 6S damit in die Läden, nachdem Apple es bei seiner Smartwatch und den Notebook-Touchpads eingeführt hatte. Auch einige Android-Geräte beherrschen inzwischen eine ähnliche Technik: das Huawei Mate S (tatsächlich einige Tage vor dem iPhone vorgestellt, hier im Hands-On von der IFA), das ZTE Axon Mini und laut einem Gerücht auch das zukünftige Samsung Galaxy S7.

Im Zuge der Berichterstattung fiel dem Android-Entwickler Adam Outler auf, dass Android schon lange eine Druckstufen-Abfrage unterstützt, und zwar in Form der seit API1 vorhandenen und seit API5 multitouch-fähigen Funktion MotionEvent.getPressure(). Er programmierte daraufhin eine kleine App zur Anzeige der Finger-Druckstärke.

Doch seine von vielen Kommentatoren dankbar aufgenommene Interpretation, dass Android daher Force-Touch-fähig sei, trifft nicht zu. Die aktuelle Implementierung greift nämlich viel zu kurz und ist bestenfalls eine Voraussetzung. Ohne eine weitere Ausarbeitung seitens Google beherrscht Android kein Force Touch. Im Detail:

Aus Programmierer-Sicht ist getPressure() eine Methode der Klasse MotionEvent. Diese MotionEvents werden von vielen Eingabegeräten abgefeuert, doch Google spezifiziert nicht genau, welche davon in getPressure() einen sinnvollen Wert liefern. Ein Beispielprogramm von Google wertet den Druck explizit nur für Stifteingaben aus, ein anderes sammelt hingegen die Druckstärke auch für Touchscreen-Eingaben ein. Entsprechend unvorhersehbar benehmen sich die Smartphones:

Vergrößern Force Touch Demo: Die App zeigt, wie unterschiedlich die Smartphones getPressure() befüllen.
  • Tatsächlich meldet das drucksensitive ZTE Axon Mini im c't-Labor den gemessenen Druck über diese Schnittstelle zurück. (Das Huawei haben wir noch nicht im Haus.)
  • Einige andere Smartphones liefern einen von der Auflagefläche abhängigen Wert, was nur ein unzureichender Ersatz für den Druck darstellt.
  • Andere wiederum liefern einfach 1.
  • Bei den MotionEvents eines Stifts beispielsweise vom Samsung Note entspricht getPressure() erwartungsgemäß der Druckstärke des Stifts.

Als weitere Einschränkung für Entwickler passt getPressure nicht zum normalen Event-Workflow. Üblicherweise fragen Entwickler einen Einfach- und Langzeitklick ab, indem sie die EventListener onClick() und onLongClick() implementieren. Doch beide bekommen den MotionEvent gar nicht mitgeliefert, der zum Klick geführt hat.

Ein Ausweg wäre, den alternativen EventListener onTouch() abzuhören, dem der MotionEvent übergeben wird. Allerdings müssen sich die Entwickler nun aus den ganzen eintreffenden Up-, Down- und Move-Events selbst zusammenstricken, was ein Klick (und Einfach- und Langzeitklick) sein soll – gerade bei Multitouch nicht trivial. Üblicherweise nutzen nur Spiele und Zeichenapps diesen Listener, für normale UserInterface-Elemente wird man den Aufwand vermeiden wollen.

Zudem fehlt eine einheitliche Reaktion: Bei Apple funktioniert Force Touch auch dadurch intuitiv, dass Smartphone und Smartwatch den festeren Druck mit einem spürbaren Vibration zurückmelden. Das ZTE-Smartphone wirft dafür kurz den normalen Vibrationsmotor an. Weil Android dieses Rütteln nicht von sich aus veranlasst, muss das jede App selbst erledigen. Die Entwickler müssen also in ihrer onTouch()-Implementierung auch das Vibrieren veranlassen, was jeder etwas anders lösen dürfte. Jede App tanzt also in ihrem eigenen Rhythmus.

Apple blendet beim Festedrücken auf ein App-Icon auf dem Homescreen ein Kontextmenü ein, das die App bestimmt. ZTE macht das ähnlich, doch nur bei den mitgelieferten Apps taucht so ein Menü auf – kein Wunder, denn Android fehlt eine Schnittstelle für dieses Kontextmenü. ZTE baut Android – beziehungsweise den mitgelieferten Launcher – selbst um, hat aber bisher nicht veröffentlicht, ob und wie ein Entwickler seiner App beibringen könnte, auf ZTE-Handys so ein Menü einzublenden.

Selbst wenn ZTE etwas veröffentlichen würde, ist es unwahrscheinlich, dass Huawei und – sollte das S7 Force Touch können – Samsung die gleiche Schnittstelle nutzen. Bestes Negativ-Beispiel ist der App-Icon-Zähler, diese kleine Blase an den Icons, in denen Apps beispielsweise über die Zahl der ungelesenen Mails informieren. Android sieht das nicht vor, aber einige Smartphone-Hersteller und einige Entwickler von Android-Launchern haben das nachgerüstet – mit unterschiedlichen APIs. Das führte dazu, dass kaum eine App außer denen dieser Hersteller die Zahlen einblenden. Auch die Spezialfunktionen, die Samsung für den Stift der Note-Serie anbietet – beispielsweise eine Reaktion aufs Hovern – nutzt kaum eine App.

Was die Android-API derzeit bietet, reicht für ein vollwertiges Force Touch nicht aus. Die Apps müssten alles selbst machen von der Erkennung bis zur Reaktion auf den festeren Druck. Die Arbeit dürfte derzeit kaum ein Entwickler leisten wollen, sondern sie lohnt sich frühestens, falls ein Galaxy S7 mit Force Touch samt offizieller Samsung-API erscheint.

So richtig gehts aber erst los, wenn Google seine APIs erweitert beispielsweise um einen EventListener onForceClick(). Bisherige Erfahrungen zeigen allerdings, dass die zusätzliche Geste auf Android-Smartphones nicht allzu sinnvoll ist: Das längere Drücken auf ein Element hat sich als Geste etabliert, und so merkt man auf dem ZTE-Telefon schnell, dass die zusätzliche Geste die Bedienung verkompliziert statt vereinfacht. Das sinnvollste für Google wäre vielleicht, das festere Drücken als Alternative zum langen Drücken zu behandeln und einfach obigen onLongClick()-Listener abzufeuern. Dann würden direkt alle Apps Force Touch beherrschen. (jow)

Kommentare

Anzeige