Plugin - getProgramsForChannelInRange

Fehler in TV-Browser für Android
Antworten
mrk
Junior Member
Beiträge: 11
Registriert: 25 Jul 2015, 14:21

Plugin - getProgramsForChannelInRange

Beitrag von mrk »

Hallo,
ich versuche gerade ein Plugin für Tv-Browser für Android zu schreiben. Dabei versuche ich das Proramm, welches zu einem bestimmten Zeitraum auf einem Sender läuft, herauszufinden. Dafür wollte ich folgende Methode des PluginManagers benutzen:

Code: Alles auswählen

Program[] getProgramsForChannelInRange(int channelId, long startTimeInUTC, long endTimeInUTC) 
Diese Methode gibt jedoch keinen Wert zurück, sondern blockiert.
Hier ein Code um den Fehler zu reproduzieren:

Code: Alles auswählen

public PluginMenu[] getContextMenuActionsForProgram(Program program) throws RemoteException {
            Program[] programs = mPluginManager.getProgramsForChannelInRange(program.getChannel().getChannelId(),                                            program.getStartTimeInUTC(), program.getEndTimeInUTC());
            Log.d(TAG,programs[0].getTitle());
            return null;
}
Eigentlich müsste jetzt der Titel der Sendung im Logcat ausgegeben werden. Es hängt aber beim Aufruf der genannten Methode.
Ist das ein Fehler oder mache ich was falsch?
Grüße
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Plugin - getProgramsForChannelInRange

Beitrag von ds10 »

Ich kann das im Moment nicht testen, daher kann ich auch nicht ausschließen, dass der Plugin-Manager fehlerhaft arbeitet. Ein paar Ideen hätte ich aber anzubieten:
-ist der PluginManager zum Zeitpunkt des Aufrufs vielleicht null?
-werden die abgefragten Werte der Sendung korrekt ausgegeben, wenn man die vor dem Zugriff auf den PluginManager logt?
-wird die Methode vielleicht ausgeführt, gibt dann aber null zurück, so dass es zu einer NPE kommt?
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
mrk
Junior Member
Beiträge: 11
Registriert: 25 Jul 2015, 14:21

Re: Plugin - getProgramsForChannelInRange

Beitrag von mrk »

Danke für die schnelle Antwort.
Ich habe es gerade nochmal getestet. Der PluginManager ist nicht null, die Werte der Sendung sind korrekt (Titel und Sender getestet) und die Methode gibt nicht null zurück. Es werden auch keine Exception gelogt. Die Sendung bleibt orange hinterlegt und das UI hängt bis ich den Tv Browser beende. Teilweise kommt es nach einiger Zeit zu einer DeadObjectException.
07-31 20:15:49.334 3469-3485/com.mrk.plugin E/JavaBinder﹕ *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
java.lang.RuntimeException: android.os.DeadObjectException
at android.os.Parcel.writeException(Parcel.java:1366)
at android.os.Binder.execTransact(Binder.java:413)
at dalvik.system.NativeStart.run(Native Method)
Caused by: android.os.DeadObjectException
at android.os.BinderProxy.transact(Native Method)
at org.tvbrowser.devplugin.PluginManager$Stub$Proxy.getProgramsForChannelInRange(PluginManager.java:487)
at com.mrk.plugin.PluginService$1.getContextMenuActionsForProgram(PluginService.java:145)
at org.tvbrowser.devplugin.Plugin$Stub.onTransact(Plugin.java:106)
at android.os.Binder.execTransact(Binder.java:407)
            at dalvik.system.NativeStart.run(Native Method)
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Plugin - getProgramsForChannelInRange

Beitrag von ds10 »

Der Fehler war im PluginManager, ich habe dir eine E-Mail geschickt mit einer korrigierten TV-Browser Version.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
mrk
Junior Member
Beiträge: 11
Registriert: 25 Jul 2015, 14:21

Re: Plugin - getProgramsForChannelInRange

Beitrag von mrk »

Danke für die schnelle Behebung des Fehlers. Die Methode funktioniert jetzt einwandfrei.
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Plugin - getProgramsForChannelInRange

Beitrag von ds10 »

Bis zum nächsten Release mit dem Fix dauert es aber noch deutlich länger, da dort noch mehr zu machen ist, falls du das Plugin veröffentlichen möchtest, solltest du so lange warten.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
mrk
Junior Member
Beiträge: 11
Registriert: 25 Jul 2015, 14:21

Re: Plugin - getProgramsForChannelInRange

Beitrag von mrk »

Ja. Ich brauche sowieso noch etwas Zeit für die Entwicklung des Plugins. Sollte ich dennoch vorher fertig sein, warte ich natürlich bis der Fix veröffentlicht ist.
mrk
Junior Member
Beiträge: 11
Registriert: 25 Jul 2015, 14:21

Re: Plugin - getProgramsForChannelInRange

Beitrag von mrk »

Ich arbeite gerade weiter an dem Plugin und stehe vor einem Problem. Ich habe die Anfangs- und Endzeiten von aufzunehmenden und bereits aufgenommenen Filmen in einer Datenbank gespeichert. Jetzt will ich diese im Tv-Browser markieren. Das funktioniert über die GetProgramsForChannelInRange Methode nur, wenn die gesamte Sendung innerhalb der Aufnahmezeit liegt. Beginnt die Aufnahme nur eine Minute später oder endet sie eine Minute früher, gibt die Methode null zurück. Kannst du eine Methode schreiben, die auch Sendungen, die nur teilweise innerhalb der angegebenen Zeitspanne liegen, zurück gibt?
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Plugin - getProgramsForChannelInRange

Beitrag von ds10 »

Die Methode erlaubt dir doch die Zeiten frei zu wählen, die Anfangszeit der Sendung muss nur größer (oder gleich) und die Endzeit nur kleiner (oder gleich) sein als die gewählte Zeitspanne. Du erhältst dann ein Array mit allen Sendungen, die in dem Zeitbereich liegen. Das kannst du dann nach einer passenden Sendung durchsuchen. (Die Zeitspanne darf nur nicht zu groß sein, weil dann Android meckert, dass zu viele Daten von einem Service zu einen anderen Prozess übertragen werden.)
Zuletzt geändert von ds10 am 03 Aug 2015, 23:31, insgesamt 1-mal geändert.
Grund: Infos korrigiert
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
mrk
Junior Member
Beiträge: 11
Registriert: 25 Jul 2015, 14:21

Re: Plugin - getProgramsForChannelInRange

Beitrag von mrk »

ds10 hat geschrieben:Die Methode erlaubt dir doch die Zeiten frei zu wählen, der Anfangszeit der Sendung muss nur kleiner (oder gleich) und die Endzeit nur größer (oder gleich) sein als die gewählte Zeitspanne.
Ist es nicht umgekehrt? Hier ein Auszug aus dem Quellcode aus der Methode in PluginHandler.java

Code: Alles auswählen

        where.append(TvBrowserContentProvider.DATA_KEY_STARTTIME).append(">=").append(startTimeInUTC);
        where.append(" AND ");
        where.append(TvBrowserContentProvider.DATA_KEY_ENDTIME).append("<=").append(endTimeInUTC);
Es wird geprüft, ob die Anfangszeit der Sendung größer gleich der Anfangszeit der Zeitspanne und die Endzeit der Sendung kleiner gleich der Endzeit der Zeitspanne ist. Oder?
Das ist aber nur der Fall, wenn die Anfangs- und Endzeit der Sendung innerhalb der Zeitspanne liegt. Damit auch Sendungen zurück gegeben werden, die nur teilweise innerhalb der Zeitspanne liegen - also Anfangs- und/oder Endzeit der Sendung außerhalb der Zeitspanne -, müsste man prüfen, ob die Anfangszeit der Sendung kleiner gleich der Endzeit der Zeitspanne und die Endzeit der Sendung größer gleich der Anfangszeit der Zeitspanne ist.
ds10
Site Admin
Beiträge: 19095
Registriert: 23 Jun 2005, 12:36
Kontaktdaten:

Re: Plugin - getProgramsForChannelInRange

Beitrag von ds10 »

mrk hat geschrieben:Ist es nicht umgekehrt? Hier ein Auszug aus dem Quellcode aus der Methode in PluginHandler.java
Ja, das stimmt, ich habe das oben geändert, damit da nichts falsches steht.
mrk hat geschrieben:Das ist aber nur der Fall, wenn die Anfangs- und Endzeit der Sendung innerhalb der Zeitspanne liegt. Damit auch Sendungen zurück gegeben werden, die nur teilweise innerhalb der Zeitspanne liegen - also Anfangs- und/oder Endzeit der Sendung außerhalb der Zeitspanne -, müsste man prüfen, ob die Anfangszeit der Sendung kleiner gleich der Endzeit der Zeitspanne und die Endzeit der Sendung größer gleich der Anfangszeit der Zeitspanne ist.
Die Idee war ja nur Sendungen zu erhalten, die komplett im angegebenen Zeitraum liegen, da man diesen ja selbst bestimmen kann.
"First they ignore you, then they ridicule you, then they fight you, then you win." - Mahatma Gandhi
Unterstütze die Weiterentwicklung von TV-Browser
mrk
Junior Member
Beiträge: 11
Registriert: 25 Jul 2015, 14:21

Re: Plugin - getProgramsForChannelInRange

Beitrag von mrk »

ds10 hat geschrieben: Die Idee war ja nur Sendungen zu erhalten, die komplett im angegebenen Zeitraum liegen, da man diesen ja selbst bestimmen kann.
Deshalb schlug ich ja vor, eine neue Methode hinzuzufügen, die auch Sendungen zurück gibt, die nur teilweise innerhalb der Zeitspanne liegen. Sonst müsste man nämlich den Zeitraum beliebig vergrößern und dann für jede Sendung einzeln prüfen, ob sie noch innerhalb der eigentlichen Zeitspanne liegt. Das funktioniert natürlich auch, aber es wäre einfacher mit einer neuen Methode.
Antworten