Autor Thema: Erstelle ein Plugin für EgiGeoZone  (Gelesen 532 mal)

Admin

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 745
    • EgiGeoZone
  • Gerät: Xiaomi Mi 9 SE, Xiaomi Redmi Note 5, Samsung Galaxy Note 2, S4, S5, S2, S7
  • Version: MIUI 10.0 Global, Android 4.4, 5, 6, 7, 8, 8.1, 9, 10
Erstelle ein Plugin für EgiGeoZone
« am: 07.10.2015, 08:38:49 »
Ab der Version 2.0.4 können Entwickler ein Plugin nach ihren Bedürfnissen für EgiGeoZone entwickeln.

Diese Information wird unter http://egigeozone.de/developer/default.html weiter gepflegt.

Rezept um ein EgiGeoZone-Plugin zu entwickeln

- In den EgiGeoZone-Einstellungen "Übermittlung an Plugins erlauben" aktivieren.

- Dann ein neues Android Projekt erstellen und da mindestens eine Activity für die Plugin-Konfiguration, wenn nötig, erstellen. Das Plugin ist selbst für das Abspeichern der Konfiguration zuständig. Man kann diese z.B. in den SharedPreferences oder in einer Datenbank speichern.

- Das Projekt sollte auch einen BroadcastReceiver oder besser einen WakefulBroadcastReceiver, welcher die Intents empfangen wird, anlegen. Dieser BroadcastReceiver muss auf die Aktion "de.egi.geofence.geozone.plugin.EVENT" hören. Dieser BroadcastReceiver startet dann am besten einen Dienst (Service), welcher dann die Plugin-Arbeit erledigt.

- Der von der EgiGeoZone-App gelieferte Intent stellt folgende Parameter zur Verfügung:
  • "transition" : "1" für Betreten und "0" für Verlassen der Zone
  • "zone_name"  : Name der Zone
  • "latitude"   : Breitengrad der Zone
  • "longitude"  : Längengrad der Zone
  • "device_id"  : Eine UUID, welche die ID des mobilen Gerätes darstellen soll.
  • "date_iso"   : UTC-Datum und Zeit im Format "yyyy-MM-dd'T'HH:mm:ss'Z'"
  • "date_device": Lokales Datum und Zeit im Format "yyyy-MM-dd'T'HH:mm:ss"

Neue Parameter können gerne angefordert werden. Sofern diese von der Haupt-App geliefert werden können, werde ich diese in einer neuen Version bereitstellen.

- Sobald eine Zone Betreten oder Verlassen wird, werden alle Plugins mit der Intent-Filter-Aktion "de.egi.geofence.geozone.GETPLUGINS" gesucht und nur an diese wird die Übermittlung gestartet.

Beispiel für diesen Teil in der Manifest-Datei:
<activity
android:name=".ExamplePluginMain"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="de.egi.geofence.geozone.GETPLUGINS" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

- Für einen WakefulBroadcastReceiver ist noch folgende Erlaubnis (permission) erforderlich:
   <uses-permission android:name="android.permission.WAKE_LOCK" />

- Die EgiGeoZone-App führt die auf dem Gerät gefundenen Plugins unter dem Menüpunkt Verwaltung auf. Mit einem Klick auf einem der Plugins, kann die Haupt-Activity des Plugins aufgerufen werden.   Deshalb ist es eine gute Idee den "application label" und "application icon" zu referenzieren. Diese werden für die Auflistung und dem Aufruf benötigt:
   
      <application
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
...

- Zur Erinnerung: der deifinierte Receiver im Plugin muss auf die "de.egi.geofence.geozone.plugin.EVENT" Aktion hören, sonst kann dieser nicht die Parameter empfangen:
          <receiver android:name=".ExampleBroadcastReceiverPlugin">
              <intent-filter>
                  <action android:name="de.egi.geofence.geozone.plugin.EVENT" />
              </intent-filter>
          </receiver>

- Ein Beispiel-Plugin als Quellcode kann hier heruntergeladen werden: http://www.egigeozone.de/download/ExamplePluginSource.zip
- Die App findet man auch im Google Play Store: https://play.google.com/store/apps/details?id=de.egi.geofence.geozone.plugin.example
« Letzte Änderung: 07.03.2017, 09:26:24 von Admin »
Schöne Grüße
Egmont