Beantragung von Genehmigungen
Da unsere App Audio- und Videodaten vom Gerät des Nutzers verwendet, müssen wir etwas Code hinzufügen, um Audio- und Videoberechtigungen anzufordern. Wir verwenden Accompagnist, um den Prozess zu vereinfachen.
- Berechtigungen hinzufügen zu
AndroidManifest.xml
Im Inneren Ihres AndroidManifest.xmlfügen Sie Folgendes hinzu innerhalb der <manifest> Tag:
ℹ️ Anmerkung: Die WAKE_LOCK wird verwendet, damit das Gerät während eines Videoanrufs nicht schläft. Dies gewährleistet eine ununterbrochene Medienübertragung.
- Hinzufügen von Abhängigkeiten und Manifestberechtigungen
Fügen Sie zunächst die Accompanist Abhängigkeit zu Ihrer build.gradle Datei:
dependencies {
implementation("com.google.accompanist:accompanist-permissions:0.34.0")
}
- Implementierung der Rechteverwaltung in compose
Mit Accompanistverwenden wir rememberMultiplePermissionsState. Dadurch kann die Benutzeroberfläche automatisch reagieren, wenn Berechtigungen gewährt oder verweigert werden. Eine neue Datei erstellen VideoChatPermissionWrapper.kt wie folgt:
@OptIn(ExperimentalPermissionsApi::class)
@Composable
fun VideoChatPermissionWrapper(
onPermissionsGranted: () -> Unit,
content: @Composable () -> Unit
) {
val permissionsState = rememberMultiplePermissionsState(
permissions = listOf(
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO
)
)
if (permissionsState.allPermissionsGranted) {
// 1. Notify parent that permissions are ready (run once)
LaunchedEffect(Unit) {
onPermissionsGranted()
}
// 2. Show the actual video UI
content()
} else {
// 3. Show a Rationale UI if permissions are missing
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = "Camera and Audio permissions are required for video chat.")
Button(
onClick = { permissionsState.launchMultiplePermissionRequest() },
modifier = Modifier.padding(top = 16.dp)
) {
Text("Grant Permissions")
}
}
// Auto-launch the popup on the very first composition
LaunchedEffect(Unit) {
if (!permissionsState.allPermissionsGranted) {
permissionsState.launchMultiplePermissionRequest()
}
}
}
}
- Update
MainActivity.kt& definieren dieinitializeSession()Methode als Platzhalter für die Einrichtung Ihres Videoanrufs"
Integrieren Sie dies nun in Ihre MainActivity. Rufen Sie einfach Ihre VideoChatPermissionWrapper innerhalb von setContent.
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
VideoChatPermissionWrapper(
onPermissionsGranted = {
initializeSession(
appId = VonageVideoConfig.APP_ID,
sessionId = VonageVideoConfig.SESSION_ID,
token = VonageVideoConfig.TOKEN
)
}
) {
VideoChatScreen(
publisherView = publisherView,
subscriberView = subscriberView
)
}
}
}
private fun initializeSession(appId: String, sessionId: String, token: String) {
// TODO: Connect to Vonage session
}
}
- Nächste Schritte
Sobald die Genehmigungen erteilt sind, wird die initializeSession() Funktion ausgelöst werden. In den nächsten Schritten des Tutorials werden Sie die Logik implementieren, um eine Verbindung zu einer Vonage Video API-Sitzung herzustellen.
Benutzerdefinierter Audiotreiber
Hier erfahren Sie, wie Sie einen benutzerdefinierten Audiotreiber verwenden, um den Audio-Stream des Herausgebers und der Teilnehmer anzupassen. Sie werden den benutzerdefinierten Audiotreiber verwenden, wenn Sie die Audio-Wiedergabe Ihrer eigenen Audiodatei starten und stoppen und alles tun möchten, was über das Standardverhalten des vom SDK bereitgestellten Live-Video-Chats hinausgeht.