Richtlinien für Mobilgeräte – Android
In diesem Thema werden Aspekte behandelt, die bei der Entwicklung für ein Android-Gerät zu beachten sind:
- Berechtigungen
- Erstellen einer VoIP-App mithilfe des Android ConnectionService
- Einrichten von Vordergrunddiensten
- Weitere Informationen
Berechtigungen
Informationen zu den vom OpenTok Android SDK benötigten Berechtigungen finden Sie unter der Abschnitt „Berechtigungen“ aus der Übersicht zum Android SDK.
Erstellen einer VoIP-App mithilfe des Android ConnectionService
Verwenden Sie Android ConnectionService Klasse zum Erstellen einer VoIP-App, die die Audio- und Videofunktionen des OpenTok Android SDK nutzt.
Befolgen Sie mindestens diese Richtlinien, um eine einfache VoIP-App zu erstellen:
-
Registrieren Sie die
android.telecom.ConnectionServicein der Datei AndroidManifest.xml.Kopieren<service android:name="com.example.package.MyConnectionService" android:label="@string/some_label_for_my_connection_service" android:permission="android.permission.BIND_TELECOM_CONNECTION_SERVICE"> <intent-filter> <action android:name="android.telecom.ConnectionService" /> </intent-filter> </service> -
Erstellen Sie eine Klasse, die die Klasse
android.telecom.ConnectionServiceKlasse. Implementieren Sie Methoden derConnectionServiceKlasse, einschließlichonCreateIncomingConnection(),onCreateOutgoingConnection,onCreateIncomingConnectionFailed()undonCreateOutgoingConnectionFailed(). -
Erstellen Sie eine Klasse, die die Klasse
android.telecom.ConnectionKlasse. Implementieren Sie Methoden derConnectionKlasse, einschließlichonAnswer()undonDisconnect. Bei der Umsetzung deronAnswer()Mit dieser Methode können Sie eine Verbindung zu einer OpenTok-Sitzung herstellen, einen Stream in der Sitzung veröffentlichen und es dem Code ermöglichen, die in der Sitzung erstellten Streams zu abonnieren. In der Implementierung deronDisconnect()Mit dieser Methode können Sie die Verbindung zur OpenTok-Sitzung trennen (und das Veröffentlichen und Abonnieren von Streams beenden). -
Sie können Dienste wie Google Firebase verwenden, um Push-Benachrichtigungen für die App zu implementieren. Sie können Benachrichtigungen einrichten, um zu erfahren, wann Ihre App im Hintergrund läuft oder geschlossen ist. Auf diese Weise kann Ihre App einen VoIP-Anruf erhalten, während sie geschlossen ist.
Wenn Sie den ConnectionService verwenden, nutzen Sie den AudioDeviceManager.getAudioFocusManager() Verwenden Sie die Methode und implementieren Sie die Methoden der zurückgegebenen `AudioFocusManager`-Instanz, um die Steuerung des Audio-Fokus an Ihre App zu delegieren. Diese sind im OpenTok Android SDK definiert:
private AudioDeviceManager audioDeviceManager;
private AudioFocusManager audioFocusManager;
public void setupAudioFocusManager(Context context) {
audioDeviceManager = new AudioDeviceManager(context);
audioFocusManager = audioDeviceManager.getAudioFocusManager();
audioFocusManager.setRequestAudioFocus(false);
}
public void notifyAudioFocusIsActive() {
audioFocusManager.audioFocusActivated();
}
public void notifyAudioFocusIsInactive() {
audioFocusManager.audioFocusDeactivated();
}
Wenn der Audiofokus an die App delegiert wird, stellt das SDK seine automatische Audioweiterleitung ein. Stattdessen wird diese Weiterleitungslogik vom ConnectionService übernommen, der die App über die APIs „CallEndpoint“ und „CallAudioState“ der Connection über verfügbare Audiogeräte informiert. Ihre App muss die Unterstützung für die Auflistung von Audiogeräten und die Auswahllogik implementieren.
Diese Delegation gewährleistet die ordnungsgemäße Weiterleitung von Audiodaten und die Koordination mit dem Android-Telekommunikationssystem.
Siehe die Beispiel VOIP-Anwendung im Repository „opentok-android-sdk-samples“. Dort wird gezeigt, wie man die Klasse „ConnectionService“ implementiert, um eine VoIP-App zu erstellen, die das OpenTok Android SDK nutzt.
Einrichten von Vordergrunddiensten
Mit Vordergrunddiensten können Sie Operationen asynchron ausführen, die für den Nutzer sichtbar sind. Vordergrunddienste zeigen eine Benachrichtigung in der Statusleiste an, um den Nutzer darauf hinzuweisen, dass Ihre App eine Aufgabe im Vordergrund ausführt und Systemressourcen beansprucht. Beachten Sie, dass der ConnectionService als Vordergrunddienst verwendet werden kann. Beispiele für Anwendungsfälle, in denen Vordergrunddienste zum Einsatz kommen, sind unter anderem:
-
Erfassen und senden Sie weiterhin Audiodaten an Peers, auch wenn der Benutzer eine andere Anwendung öffnet.
-
Ermöglichen Sie es einem Benutzer, seinen Bildschirm freizugeben, während er zwischen Anwendungen wechselt.
-
Benutzern ermöglichen, den Bildschirm auszuschalten, während sie weiterhin einem Videoanruf zuhören.
Arten von Diensten im Vordergrund
Mit Android 10 wurde das Attribut „android:foregroundServiceType“ innerhalb des Elements eingeführt. Damit soll explizit festgelegt werden, welche Art von Aufgaben der Dienst ausführt.
In Android 14 ist die Angabe des Vordergrunddiensttyps obligatorisch. Damit soll die korrekte Verwendung von Vordergrunddiensten und die Konsistenz zwischen den Geräteherstellern sichergestellt werden.
Die derzeit unterstützten Typen sind:
-
camera(erforderlich unter Android 11) — Beim Zugriff auf die Kamera im Hintergrund, z. B. bei Videoanruf-Apps -
connectedDevice— Bei der Interaktion mit externen Geräten, wie z. B. Bluetooth-Fitnessgeräten -
dataSync— Beim Hoch- oder Herunterladen von Daten wird diese Funktion nicht mehr unterstützt; stattdessen sollten Alternativen wie DownloadManager, BackupManager oder WorkManager verwendet werden. -
health(neu in Android 14) — Für Fitness-Apps wie Trainings-Tracker -
location(erforderlich unter Android 10) — Wenn Standortdaten benötigt werden, z. B. bei der Navigation -
mediaPlayback— Bei der Fortsetzung der Audio- oder Videowiedergabe aus dem Hintergrund, z. B. bei Spotify oder Netflix -
mediaProjection— Bei der Übertragung von Inhalten auf externe Geräte oder Bildschirme -
microphone(erforderlich unter Android 11) — Beim Zugriff auf das Mikrofon im Hintergrund, z. B. durch Anruf-Apps -
phoneCall— Bei der Fortsetzung eines laufenden Gesprächs -
remoteMessaging(neu in Android 14) - beim Übertragen von Textnachrichten von einem Gerät auf ein anderes -
shortService— Wenn ein Dienst benötigt wird, um wichtige Aufgaben, die nicht unterbrochen werden dürfen, schnell abzuschließen (die Laufzeit ist auf etwa 3 Minuten begrenzt) -
specialUse— Wenn andere Typen Ihren Anwendungsfall nicht abdecken -
systemExempted— Für System-Apps reserviert
Diensttyp für den Vordergrund deklarieren
Der erste Schritt zur Unterstützung von Android 14 besteht darin, Ihre Dienstdeklaration in der AndroidManifest-Datei zu aktualisieren und den richtigen Vordergrunddiensttyp anzugeben.
Wenn Ihr Dienst mehrere Typen erfordert, können Sie diese mit dem Operator | wie folgt kombinieren:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
<service
android:name=".MyForegroundService"
android:foregroundServiceType="microphone|camera"
android:exported="false">
</service>
</manifest>
Wenn Sie versuchen, einen Vordergrunddienst zu starten, ohne seinen Typ im Manifest zu deklarieren, gibt das System eine MissingForegroundServiceTypeException auf Zuruf startForeground().
Bestimmte Berechtigungen für Vordergrunddienste anfordern
Ab Android 9 (API 28) mussten Apps die FOREGROUND_SERVICE Berechtigung im App-Manifest, die vom System automatisch erteilt wurde.
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
Ab Android 14 (API 34) müssen Apps je nach Art des Vordergrunddienstes zusätzlich bestimmte Berechtigungen anfordern. Wenn Ihr Dienst also im Hintergrund kontinuierlich auf das Mikrofon zugreift, müssen Sie Folgendes angeben: FOREGROUND_SERVICE_MICROPHONE. Die Genehmigung wird automatisch vom System erteilt.
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE"/>
Wenn Ihr Dienst mehrere Typen erfordert, müssen Sie diese Berechtigung für jeden Typ einzeln deklarieren.
Wenn Sie vergessen, eine der beiden Berechtigungen anzugeben, erhalten Sie eine SecurityException mit der genauen Begründung.
Starten eines Dienstes im Vordergrund
Je nach verwendeter API-Stufe starten Sie den Dienst wie folgt:
Intent serviceIntent = new Intent(this, MyForegroundService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // Android 8.0 (API 26) and above
startForegroundService(serviceIntent);
} else { // Android 7.0 (API 24, 25)
startService(serviceIntent);
}
Der Codeausschnitt startet einen Dienst. Der Dienst läuft jedoch noch nicht im Vordergrund. Innerhalb des Dienstes selbst müssen Sie folgenden Befehl aufrufen: startForeground() um den Dienst in den Vordergrund zu bringen. Wenn Sie AndroidX verwenden, müssen Sie folgende Methode aufrufen: ServiceCompat.startForeground().
Geben Sie Details zu Ihrem Anwendungsfall in der Google Play Console an
Nachdem Sie die neue Version der App, die auf Android 14 abzielt und einen Vordergrunddiensttyp verwendet, in die Google Play Console hochgeladen haben, wird in Ihrer Konsole eine Aufforderung angezeigt, zusätzliche Details über Ihre Nutzung anzugeben.
Da Google sicherstellen möchte, dass die Apps die Vordergrunddienste ordnungsgemäß nutzen, müssen Sie auf der Seite mit den App-Inhalten (Richtlinie -> App-Inhalte) eine neue Erklärung abgeben.
Für jeden Vordergrunddiensttyp, den Sie deklarieren, müssen Sie Folgendes tun:
-
Beschreiben Sie die App-Funktionalität, die den Diensttyp „Vordergrund“ nutzt.
-
Beschreiben Sie die Auswirkungen auf den Benutzer, wenn die Aufgabe durch das System verschoben oder unterbrochen wird.
-
Fügen Sie einen Link zu einem Video ein, das jede Vordergrunddienstfunktion demonstriert. Das Video sollte die Schritte demonstrieren, die der Benutzer in Ihrer App ausführen muss, um die Funktion auszulösen.
-
Wählen Sie Ihren spezifischen Anwendungsfall für jeden Vordergrunddiensttyp. Sie können aus einer voreingestellten Liste von Anwendungsfällen wählen, die hier aufgeführt sind, oder sie manuell eingeben.
Beispiel-App und weitere Informationen
Siehe die Einfacher Video-Chat mit ForegroundServices in Java Probe in der opentok-android-sdk-Beispiele Repo.
Lesen Sie mehr in der Android Überblick über die vordergründigen Dienste Dokumentation.
Weitere Informationen
Weitere Informationen finden Sie unter: