No description
Find a file
2026-10-25 13:01:58 +01:00
app Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00
gradle Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00
.gitignore Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00
build.gradle.kts Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00
COPYRIGHT Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00
gradle.properties Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00
gradlew Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00
gradlew.bat Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00
LICENSE Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00
README.md Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00
settings.gradle.kts Stand vom 2026-10-25 2026-10-25 13:01:58 +01:00

ByteFM

Native Android-App für den Radiosender ByteFM (Hamburg) — ein Tipp bis zur Musik. Kein WebView, kein Login, keine Werbung. Aufgebaut wie die Schwester-App für FIP.

Funktionen

  • Alle drei Streams in einer Spalte: Web, Hamburg und „Nur Musik".
  • Homescreen-Widget, das mitwächst: schmal nur der Knopf, größer mit Bild, Titel, Interpret und Sendung. Anmutung je Kachel wählbar (Gedämpft/Glas/Voll/Systemfarben).
  • Sperrbildschirm- und Bluetooth-Steuerung über Media3 MediaSessionService, inkl. Bild als echte Bilddaten (für AVRCP/Autoradio). Die Sendung reist im Album-Feld mit, weil weder AVRCP noch der Sperrbildschirm ein eigenes Feld dafür kennen.
  • Live-Vorschau ohne Play: beim Öffnen zeigt die App tonlos, was gerade läuft.
  • Verlauf der ausgespielten Titel (füllt sich, während die App läuft).
  • Merken: Favoriten rein lokal, mit Herz auch vom Sperrbildschirm aus.
  • Titelangaben herausgeben: langer Druck auf eine Zeile (oder auf die Titelangaben im Hauptfenster) legt einen Titel in die Zwischenablage; der Knopf oben in Verlauf und Merkliste gibt die ganze Liste heraus – als CSV in eine selbst gewählte Datei (ACTION_CREATE_DOCUMENT, keine Speicherberechtigung nötig) oder komplett in die Zwischenablage. Die Zeitspalte heißt je nach Liste „Gehört um" bzw. „Gemerkt am"; wo ByteFM keine Sendezeit hergibt, bleibt sie leer statt erfunden.
  • Und zwar so, wie man will: welche Angaben in welcher Reihenfolge herauskommen, stellt man selbst ein → Titelangaben.

Titelangaben einstellen

Erreichbar über den Schieberegler-Knopf in der Kopfzeile des Hauptfensters, außerdem als Eintrag „Angaben einstellen …" im Herausgeben-Dialog und als Aktion in der Meldung nach dem Kopieren.

  • Sechs Felder – Interpret, Titel, Sendung, Stream, Datum, Uhrzeit – einzeln an- und abwählbar und mit ▲▼ umsortierbar. Album und Jahr fehlen nicht aus Versehen: ByteFM gibt beides nicht heraus, die Sendung ist hier die zweite einordnende Angabe.
  • Zwei getrennte Einstellungen (Kopierformat.Zweck): eine für die Zwischenablage, eine für die CSV-Tabelle. Die eine Zeile zum Weiterschicken verträgt weniger als eine Tabellenspalte, deshalb ist das nicht eine Einstellung mit zwei Anwendungen.
  • Trennzeichen für die Zwischenablage: ·, –, , oder Zeilenumbruch. Bei Umbruch trennt die Liste mit einer Leerzeile, sonst liefe sie zu einem Block zusammen.
  • Vorschau an einem erfundenen Beispieltitel, die bei jedem Haken sofort mitzieht. Bewusst nicht der laufende Titel: der kann leer sein, und man will die Wirkung aller Felder sehen.
  • Zwei Zusammenziehregeln, damit das Ergebnis lesbar bleibt: Interpret und Titel nebeneinander werden zu „Interpret – Titel" (außer bei Trenner = Umbruch), Datum und Uhrzeit nebeneinander ergeben in der Tabelle eine Spalte mit dem Kopf „Gehört um"/„Gemerkt am" – genau die Fassung, die es vor der Einstellbarkeit gab.
  • Die Vorgaben bilden den Stand v1.1.1 ab: wer nichts einstellt, merkt vom Umbau nichts.
  • Gespeichert wird die ganze Reihenfolge samt abgewählter Felder (-uhrzeit), damit ein Feld beim Abwählen seinen Platz behält; beim Einlesen werden unbekannte Einträge verworfen und später hinzugekommene Felder hinten angehängt – eine alte Einstellung überlebt also ein Update, das ein Feld dazustellt.

Woher die Angaben kommen

Stream Mount bei uplink.byte.fm Titel
Web bytefm-main/mp3-128 Website
Hamburg bytefm-hamburg/mp3-128 Website
Nur Musik bytefm-nurmusikhq/mp3-192 Tonstrom (ICY)
  • https://www.byte.fm/ajax/song-history/ liefert die letzten fünf Titel (neueste zuerst, als HTML-Zeichenketten „Interpret – Titel"), ein Künstlerbild zum laufenden Titel sowie Sendung, Untertitel, Sendezeit, Moderation und die nächste Sendung. Vor byte.fm sitzt Cloudflare — ohne Browser-Kennzeichen kommt eine Rätselseite zurück.
  • Es gibt keine Sendezeiten je Titel und keine Plattencover. Deshalb bekommen nachgetragene ältere Titel im Verlauf keine erfundene Uhrzeit, sondern „vorher"; als Bild dient das Künstlerfoto aus dem Discogs-Zwischenspeicher der Website.
  • „Nur Musik" ist ein eigenes Programm (icy-name: ByteFM Nur Musik HQ). Über 20 Minuten parallel mitgeschnitten: kein einziger gemeinsamer Titel mit dem Hauptprogramm, auch nicht zeitversetzt; während dort zur vollen Stunde „ByteFM – Nachrichten" lief, spielte es einfach weiter Musik. Die Website kennt es nicht, seine Titel stehen nur im Tonstrom — dort also erst beim Hören.
  • Nicht jeder Eintrag der Titelliste ist ein Stück: ByteFM stellt dort auch Moderationsansagen („Korridor – mit Lars Florian Walklang") und die Nachrichten („ByteFM – Nachrichten") ein. Die App zeigt sie an — es läuft ja gerade —, nimmt sie aber nicht in den Verlauf auf. Erkannt am Interpretenfeld (Sendername bzw. „ByteFM").
  • Bei Web und Hamburg wird der StreamTitle aus dem Tonstrom nicht angezeigt, sondern nur als Uhr benutzt: er stößt sofort einen Abruf an. Anzeige und Verlauf kommen so immer aus derselben Quelle.

Technik

  • Media3/ExoPlayer als MediaSessionService, plain Views + Material 3 (kein Compose).
  • Alle Kopfzeilen-Knöpfe tragen beim langen Druck ihren Namen (TooltipCompat, wirkt anders als android:tooltipText auch unter Android 8). Anlass: der Pfeil des Herausgeben-Knopfes wurde für „Hochladen" gehalten — Symbole allein tragen nicht.
  • minSdk 24, target/compile 35.
  • Build mit JDK 21 (Gradle 8.13): JAVA_HOME=/usr/lib/jvm/java-21-temurin-jdk ./gradlew assembleRelease

Verteilung

Ausgeliefert über ein eigenes F-Droid-Repo, signiert mit einem gemeinsamen Release-Key. Der Debug-Keystore in build.gradle.kts dient nur dem Testen; das echte Signieren übernimmt apk-publish.sh.