Wie erstellt Facebook die Chat Heads auf Android? Was ist die API, um die schwebenden Ansichten über allen anderen Ansichten zu erstellen?Welche APIs in Android verwendet Facebook, um Chat Heads zu erstellen?
Antwort
This one:
Ermöglicht eine Anwendung, Fenster zu öffnen, den Typ TYPE_SYSTEM_ALERT verwenden, über alle anderen Anwendungen gezeigt. Sehr wenige Anwendungen sollten diese Berechtigung verwenden; Diese Fenster sind für die Interaktion auf Systemebene mit dem Benutzer vorgesehen.
Konstanter Wert: "android.permission.SYSTEM_ALERT_WINDOW"
// EDIT: Der vollständige Code here:
public class ChatHeadService extends Service {
private WindowManager windowManager;
private ImageView chatHead;
@Override public IBinder onBind(Intent intent) {
// Not used
return null;
}
@Override public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
chatHead = new ImageView(this);
chatHead.setImageResource(R.drawable.android_head);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 100;
windowManager.addView(chatHead, params);
}
@Override
public void onDestroy() {
super.onDestroy();
if (chatHead != null) windowManager.removeView(chatHead);
}
}
Vergessen Sie nicht irgendwie den Dienst zu starten:
startService(new Intent(context, ChatHeadService.class));
.. Und diesen Service zu Ihrem Manifest hinzufügen.
Es gibt mehr komische Sachen, denke ich. Was ist mit der Handhabung von Eingaben außerhalb des "Kopfes" und der Verschiebbarkeit? Ich denke, dass Sie mindestens [FLAG_NOT_TOUCH_MODAL] (http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_NOT_TOUCH_MODAL), sowie einige kluge Logik benötigen, um die Fensterattribute zu aktualisieren (dh Bewegen Sie es, während Sie es ziehen. – Delyan
darin, wie man choke -heads entfernt? –
Dachte, dass es wert ist, ein SDK zu erwähnen, das ich für die Erstellung der schwimmenden UI entwickelt habe: www.tooleap.com – Arik
In der Regel sind Android-Aktivitäten im Vollbildmodus, konzeptionell dedizierte Benutzeroberflächen, die die gesamte Interaktion übernehmen. Es gibt ein paar Ausnahmen. Zum einen gibt es Popup-Dialoge, die den Bildschirm nicht füllen. Ein anderer ist der Android-Toast, der ein nicht-interaktives Popup ist - du kannst es nicht berühren, und wenn du es versuchst, wird es zu dem, was darunter ist, gehen.
Sie können auch Ihre eigenen speziellen Benutzeroberflächen erstellen. Sie können Ansichten direkt zur WindowManager
hinzufügen, indem Sie einen Typ-Flag angeben. Chat Heads verwendet wahrscheinlich TYPE_PHONE. Es gibt ein paar ähnliche Typen, aber der Zweck ist der gleiche: Overlays für spezielle Zwecke, die über allem anderen erscheinen können, ohne dass die Hauptanwendung offensichtlich vorhanden ist.
Das bringt Sie aber bisher nur wegen Problemen mit der Interaktion. Zuerst wird Ihr Overlay die gesamte Interaktion absorbieren, so dass der Kopf nicht nur Ereignisse erhält, sondern auch die Interaktion mit dem darunterliegenden Objekt.
Sie konfigurieren dieses Verhalten mit der LayoutParams. FLAG_NOT_TOUCH_MODAL
bedeutet, dass Ereignisse außerhalb Ihres Anzeigebereichs zu den zugrunde liegenden Benutzeroberflächen gehen. Sie werden jetzt feststellen, dass es funktioniert, aber dass noch andere schlimme Dinge passieren, wie die Zurück-/Menü-Tasten nicht auf Apps gerichtet werden, plus keine Tastatur. Um das zu lösen, benötigen Sie FLAG_NOT_FOCUSABLE
.
Sie erhalten einen Nebeneffekt von dem nicht fokussierbaren Bit, das keine netten Interaktionen mit Ihrem Overlay mehr ist, z. Taste drückt. Sie können jedoch einige grundlegende Berührungsereignisse erhalten, mit denen Sie immer rechnen können, und das ist wahrscheinlich genug für Chat Heads. Seien Sie sich jedoch bewusst, dass Sie in vielen Bereichen wie UI-Animation selbständig bleiben.
Eine gute Übersicht über das Detail, einschließlich der Möglichkeit der selektiven Interaktion, finden Sie in this StackOverflow thread. Insbesondere wird einer der Antwort-Links Sie schließlich here nehmen, was ein gutes Beispielprojekt ist. Beachten Sie, dass ICS geändert hat, wie das funktioniert, aber die Threads erklären das.
Dies ist alles öffentliche API-Zeug, aber es scheint nicht wirklich eine Mainstream-Sache, die man tun sollte, als eine Selbstverständlichkeit. Die Dokumentation ist mit Verweisen auf spezielle System-App-Verhaltensweisen übersät, und zwar aus gutem Grund; Was wäre, wenn alle es getan hätten?
Konnte ich irgendwie Orientierungsänderungen für diese Ansicht blockieren? Wenn die zugrunde liegende Aktivität die Ausrichtung ändert, ändert meine Ansicht auch ihre Ausrichtung. –
Nein. Die Orientierungsänderung ist gerätespezifisch, nicht nur für die Aktivität. –
Springy heads gibt Feder-basierte Verhalten von Chat-Köpfe aus der Box. Alles, was Sie definieren müssen, ist das Zeichen für den Chat-Kopf und das Fragment, das geöffnet wird, sobald der Chat-Kopf angeklickt wird. Die Chat-Köpfe reduzieren sich beim Minimieren und folgen dem Finger beim Ziehen.
Das Projekt enthält eine Demo-App, die alle eingebauten Funktionen demonstriert. Um es zu verwenden, müssen Sie dies zu Ihren Abhängigkeiten hinzufügen.
compile 'com.flipkart.springyheads:library:0.9.6'
Hey @KiranKumar, Sie haben eine sehr klare Bibliothek erstellt .. Ich liebe es einfach .. Ich versuche, verschiedene Aspekte aus dieser Bibliothek zu lernen .. Ich habe versucht, es außerhalb des Anwendungsfensters zu laufen, irgendwie bin ich etwas erfolgreich in tun, dass so .. Aber das Problem entsteht, wenn ich den Chat-Kopf außerhalb des Fensters der App klicke .. das Fragment wäre nicht in der Lage zu öffnen und zurückgeben java.lang.OutOfMemoryError .. wenn es von Ihrer Seite möglich sein könnte um mir einen Weg durch diese zu geben .. Es wird gerne geehrt .. – arraystack
@arraystack jetzt können Sie es in einem Dienst ausführen. Überprüfen Sie die Liste, wenn Zweige in der GitHub Repo –
@KiranKumar Vielen Dank, Das Problem mit der neuen lib ist die Erlaubnis von Draw über Anwendung in Marshmallow-Version – arraystack
- 1. Wie werden Facebook Chat Heads implementiert?
- 2. Facebook APIs für Android
- 3. Welche APIs werden verwendet, um Spielanwendung in j2me
- 4. Chat-Anwendung - welche Tech besser ist, Chat-App in Android
- 5. brauchen Hilfe, um Facebook-Anwendung zu erstellen?
- 6. Facebook-Chat in Delphi?
- 7. Welche Java-Technologie wird verwendet, um Android-Apps zu entwickeln?
- 8. Video-Chat auf Android
- 9. Scala verwendet veränderbare Variablen, um seine Apis zu implementieren
- 10. Facebook XMPP Chat-API - Gerätepriorität
- 11. Heads-up-Benachrichtigung - Android Lollipop
- 12. Chat Bot für Facebook Messaging
- 13. Facebook Chat API
- 14. Welche Entwicklungstechnologien werden verwendet, um bestimmte berühmte Websites zu entwickeln?
- 15. Facebook.Client WP8 verwendet welche Facebook API Version?
- 16. Proxy Facebook Chat-Firewall
- 17. Welche Algorithmen verwendet Google Mail/Facebook, um kontextbezogene Anzeigen zu schalten?
- 18. Erstellen Sie einen Web-Client integrierten Facebook-Chat?
- 19. Wie zu sagen, welche Optimierungen bjam verwendet, um Boost zu erstellen
- 20. Android Chat Anwendung Entwicklung
- 21. Firebase eins zu eins Chat Android
- 22. Facebook-Chat auf der Website
- 23. Welche parallelen Rechen-APIs nutzen Sockets?
- 24. Regex, um Klartext Chat-Protokoll zu entfernen?
- 25. Wie man Heads up Benachrichtigungen Android
- 26. Welche Dienste und Merkmale müssen verwendet werden, um Daten über BLE in Android zu senden?
- 27. Welche "Werkzeuge" werden benötigt, um ein soziales Browserspiel zu erstellen?
- 28. Welche Absichten hat die Facebook Android App?
- 29. mit Telegramm erstellen Chat-Anwendung
- 30. Welche grundlegende Datenstruktur wird verwendet, um NSOrderedSet zu implementieren
Diese App hat auch "Chat Heads" https://play.google.com/store/apps/details?id=com.ninja.sms – Oli
Wenn Sie ein Beispiel suchen, sehen https : //github.com/marshallino16/FloatingNotification – marshallino16
Hier finden Sie eine Demo und eine einfache Bibliothek: https://github.com/ericbhatti/floaties Mit dieser Bibliothek können Sie schwebende Fenster mit nur 2 Zeilen erstellen. –