Android Pluginentwicklung
Diese Anleitung erklärt, wie Plugins für die Android-App von TV-Browser geschrieben werden.
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) { ... } ... }
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
wird die Version der verwendeten Plugin-Schnittstelle eingetragen, 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 der 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.