Android Pluginentwicklung
Diese Anleitung erklärt, wie Plugins für die Android-App von TV-Browser geschrieben werden.
Inhaltsverzeichnis
Grundlagen
Die Android-App von TV-Browser verwendet die AIDL um Plugins in die App einbinden zu können. Ein Plugin stellt dabei einen Service dar. Ein Plugin für die Android-App wird als eine Klasse geschrieben, die das Service-Interface implementiert.
Um ein Plugin schreiben zu können ist das AIDL-Paket der TV-Browser-App notwendig: TvBrowserAidlPluginPackage_v1.zip
Der Inhalt dieses Pakets muss in den src
-Ordner der Plugin-App entpackt werden.
Beispiel:
package org.tvbrowser.myplugin import android.app.Service; public class MyPlugin extends Service { @Override public IBinder onBind(Intent intent) { ... } ... }
Es ist empfehlenswert die Plugin-App unter dem Package org.tvbrowser
einzulisten, damit diese auf Google Play™ leichter gefunden werden kann.
Die Methode onBind
muss einen IBinder
vom Typ org.tvbrowser.devplugin.Plugin.Stub
zurückgeben. Dieser IBinder stellt die eigentliche Plugin-Funktionalität zur Verfügung.
Ein Beispiel für einen Plugin-Service kann hier eingesehen werden.
Dieser Service muss nun noch in der AndroidManifest.xml unter <application>
eingetragen werden.
Beispiel:
<service android:name=".MyPlugin" android:label="1" android:permission="org.tvbrowser.permission.BIND_PLUGIN" android:exported="true"> <intent-filter> <action android:name="org.tvbrowser.intent.action.PLUGIN"/> <category android:name="org.tvbrowser.intent.category.MyPlugin"/> </intent-filter> </service>
Für android:label
muss die Version der verwendeten Plugin-Schnittstelle eingetragen werden, damit TV-Browser weiß mit welcher Version der Plugin-Schnittstelle auf das Plugin zugegriffen werden muss. Sollen nur Applikationen mit der Berechtigung org.tvbrowser.permission.BIND_PLUGIN
auf den Plugin-Service zugreifen können (also in der Regel nur die TV-Browser-App), dann muss diese Berechtigung für den Service mit android:permission
eingetragen werden. Damit TV-Browser auf den Service zugreifen kann, muss dieser mit android:exported="true"
nach außen geöffnet sein.
Jeder Plugin-Service muss über einen Intent-Filter verfügen, der als action android:name
den Wert org.tvbrowser.intent.action.PLUGIN
setzt und für category android:name
den Wert org.tvbrowser.intent.category.PLUGINSERVICECLASSNAME
wobei PLUGINSERVICECLASSNAME
durch den Klassennamen des Plugin-Service zu ersetzen ist. Dieser muss eineindeutig sein, es darf also kein Name sein, den ein anderes Plugin verwendet.
Über den Intent-Filter findet die TV-Browser-App die verfügbaren Plugins. Ein Plugin kann entweder eine eigenständige App mit nur einem Service sein, oder aber auch ein Service der innerhalb einer App, mit eigener Funktionalität, angeboten wird. Man kann natürlich auch mehrere Plugin-Service in einer App anbieten, TV-Browser wird diese dann als eigenständige Plugins behandeln.
Methoden aus org.tvbrowser.devplugin.Plugin
Die Funktionalität des Plugins wird durch die Methode aus org.tvbrowser.devplugin.Plugin
zur Verfügung gestellt. Da es sich hierbei um ein Interface handelt, muss die Implementation von org.tvbrowser.devplugin.Plugin.Stub
alle Methoden überschreiben. Man muss aber nicht auf jede dieser Methoden reagieren.
Allgemeine Informationen über das Plugin
Folgende allgemeine Informationen über ein Plugin, werden mit den folgenden Methode abgefragt:
-
String getVersion() {
-
String getName() {
-
String getDescription() {
-
String getAuthor() {
-
String getLicense() {
getVersion()
Mit der Methode getVersion()
wird ein String
zurückgegeben, der die Version des Plugins definiert. Wie diese Version aussieht bleibt dem Plugin-Entwickler überlassen.
getName()
Mit der Methode getName()
wird ein String
zurückgegeben, der den Namen des Plugins enthält. Es ist sinnvoll hier lokalisierte Namen zurückzugeben.
getDescription()
Mit der Methode getDescription()
wird ein String
zurückgegeben, der eine Beschreibung der Funktion des Plugins enthält. Es ist sinnvoll hier lokalisierte Beschreibungen zurückzugeben.
getDescription()
Mit der Methode getAuthor()
wird ein String
zurückgegeben, der den Namen des Autors enthält.
getLicense()
Mit der Methode getLicense()
wird ein String
zurückgegeben, der die Lizenz des Plugins enthält. Es ist sinnvoll hier eine lokalisierte Lizenz zurückzugeben.