Android Pluginentwicklung

Aus TV-Browser Wiki
Version vom 3. Dezember 2014, 12:03 Uhr von Ds10⧼word-separator⧽⧼parentheses⧽ ⧼parentheses⧽
⧼revision-nav⧽
Wechseln zu: Navigation⧼comma-separator⧽Suche

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.