Wir entwickeln eine Anwendung, die Daten an andere Anwendungen sendet (Ökosystemanwendung)

Hallo Leute!

Dies ist mein zweiter Artikel über die Entwicklung meines Projekts . Für diejenigen, die den vorherigen Artikel nicht gelesen haben: Es geht darum, wie Daten automatisch von einem Ort (Google Table) an einen anderen (Home) exportiert werden.

Heute werde ich Ihnen erzählen, wie ich die Bibliothek geschrieben (und entworfen) habe, damit Anwendungen von Drittanbietern Daten empfangen können, die von meiner Anwendung gesendet wurden. Ich frage alle Interessierten unter Katze.

Teil 1. Problem


Kurz über das Projekt. Es gibt ein Gerät, das eine Verbindung zu einem Smartphone herstellt. Es gibt meine Anwendung, in der das neuronale Netzwerk Daten vom Gerät erkennt und das Ergebnis liefert. Und es gibt andere Anwendungen, die genau dieses Ergebnis erzielen möchten.

Es gibt verschiedene Arten von Ergebnissen: bloße Daten vom Gerät, verarbeitete Daten vom Gerät, Informationen zum Status des Geräts, Informationen zu den Zugriffsrechten der Anwendung auf die Daten (z. B. dass der Benutzer Zugriffsrechte auf die Daten des Geräts widerrufen hat). Es ist notwendig, genau dieses Ergebnis auf andere Anwendungen zu übertragen.

Wenn ich plötzlich etwas durch meinen Code falsch erkläre, finden Sie hier die Dokumentation für meine Bibliothek.

Teil 2. Eine Lösung planen


Es gibt einen wunderbaren Mechanismus - Sendungen. Kurz gesagt, dies ist eine Nachricht von einer Anwendung an andere Anwendungen. Sie können es sofort an alle senden oder an einen bestimmten.

Um dieses Geschäft zu senden und zu empfangen, benötigen Sie:

  1. Machen Sie irgendwie JSON aus dem übergebenen Objekt
  2. Sendung senden
  3. Akzeptieren Sie Broadcast in einer anderen Anwendung
  4. Übertragenes Objekt von JSON wiederherstellen

Im Allgemeinen ist das Erstellen eines JSON aus einem Objekt nicht immer korrekt. Sie können ein Objekt namens Parcelable per Broadcast oder Serializable senden. Serialisierbar ist eine Standardsache von Java, Parcelable ist eine ähnliche Sache, aber für mobile Geräte optimiert.

Meine Objekte sind ziemlich klein. Außerdem benötigen Sie häufig JSON: Ich habe selbst eine Drittanbieteranwendung geschrieben, damit Rohdaten an den Server gesendet werden. Daher habe ich "JSON aus dem übergebenen Objekt erstellen" ausgewählt. Vielleicht ändere ich dann meine Meinung.

Teil 3. Lösung sägen


Absatz 1 und Absatz 4. In JSON und dann zurück


Hier ist alles einfach. Es gibt eine Gson- Bibliothek, die wunderbar auf unsere Bedürfnisse zugeschnitten ist.

Überschreiben Sie die toString () -Methode, um die Dinge kühl zu machen. Machen Sie fromString (), um unser Objekt zurückzubekommen.

class SecureData(val eeg1: Double?, val eeg2: Double?, date: Date) { override fun toString(): String { val gson = Gson() return gson.toJson(this) } companion object { fun fromString(model: String): SecureData { val gson = Gson() return gson.fromJson(model, SecureData::class.java) } } } 

Punkt 2. Wir senden das Objekt


Hier ist ein Beispiel für einen solchen Code:

 val intent = Intent() intent.action = BroadcastUtils.BROADCAST_GESTURE intent.putExtra(BroadcastUtils.EXTRA_GESTRE, it.toString()) sendBroadcast(intent) 

Hier erstellen wir Absichten, legen ihre Aktion fest, setzen das Objekt und senden es als Broadcast.
BroadcastUtils.BROADCAST_GESTURE - Dies ist die kleine Sache, mit der wir eingehende Broadcasts in einer anderen Anwendung filtern (ob sie verarbeitet werden sollen oder nicht).

Um eine Nachricht an eine bestimmte Anwendung zu senden, müssen Sie zusätzlich Folgendes angeben:

  intent.component = ComponentName( PermissionsFetcher.REFACE_APP, "${PermissionsFetcher.REFACE_APP}.receivers.ActionsReceiver" ) 

PermissionsFetcher.REFACE_APP ist die APPLICATION_ID meiner Anwendung und $ {PermissionsFetcher.REFACE_APP} .receivers.ActionsReceiver ist der Pfad zum Empfänger.

Punkt 3. Wir erhalten Objekte


So registrieren wir den Empfänger. Wenn Sie es im Anwendungskontext registrieren, werden Broadcasts empfangen, bis die Anwendung geschlossen wird. Wenn Sie den Aktivierungskontext verwenden - bis er geschlossen wird.

  registerReceiver(GesturesReceiver(), IntentFilter(BroadcastUtils.BROADCAST_GESTURE)) 

Und hier ist der GesturesReceiver:

 class GesturesReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Timber.i("Received gesture") val action = BroadcastUtils.reparseGestureIntent(intent) MainApp.actionSubject.onNext(action) } } 

Wie Sie sehen, habe ich hier die Absicht erhalten, sie auf ein Objekt zurückgesetzt und sie mit RxJava irgendwohin gesendet.

Teil 4. Fazit


Sie lesen einen Artikel zum Entwerfen von Anwendungen, die mit anderen Anwendungen interagieren sollen. Ich hoffe diese Erfahrung hilft dir bei etwas.

Um den Effekt zu verstärken, können Sie die Quellen meiner Bibliothek und ein Beispiel für die Arbeit damit anzeigen und ein Sternchen einfügen, falls Sie es jemals benötigen: github.com/reface-tech/CodeSpecialApp

Source: https://habr.com/ru/post/de467205/


All Articles