Kotlin

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.

  1. 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.

  1. 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")
}
  1. 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()
            }
        }
    }
}
  1. Update MainActivity.kt & definieren die initializeSession() 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
    }
}
  1. 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.