अगर आपको अपनी पीआईपी विंडो में कंट्रोल (चलाएं, रोकें वगैरह) जोड़ने हैं, तो हर कंट्रोल के लिए एक RemoteAction बनाएं.
- अपने ब्रॉडकास्ट कंट्रोल के लिए कॉन्सटैंट जोड़ें:
// Constant for broadcast receiver const val ACTION_BROADCAST_CONTROL = "broadcast_control" // Intent extras for broadcast controls from Picture-in-Picture mode. const val EXTRA_CONTROL_TYPE = "control_type" const val EXTRA_CONTROL_PLAY = 1 const val EXTRA_CONTROL_PAUSE = 2
- अपनी पीआईपी विंडो में मौजूद कंट्रोल के लिए,
RemoteActionsकी सूची बनाएं. - इसके बाद,
BroadcastReceiverजोड़ें और हर बटन की कार्रवाइयां सेट करने के लिए,onReceive()को बदलें. रिसीवर और रिमोट ऐक्शन को रजिस्टर करने के लिए,DisposableEffectका इस्तेमाल करें. प्लेयर को बंद करने पर, रिसीवर को अनरजिस्टर करें.@RequiresApi(Build.VERSION_CODES.O) @Composable fun PlayerBroadcastReceiver(player: Player?) { val isInPipMode = rememberIsInPipMode() if (!isInPipMode || player == null) { // Broadcast receiver is only used if app is in PiP mode and player is non null return } val context = LocalContext.current DisposableEffect(player) { val broadcastReceiver: BroadcastReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context?, intent: Intent?) { if ((intent == null) || (intent.action != ACTION_BROADCAST_CONTROL)) { return } when (intent.getIntExtra(EXTRA_CONTROL_TYPE, 0)) { EXTRA_CONTROL_PAUSE -> player.pause() EXTRA_CONTROL_PLAY -> player.play() } } } ContextCompat.registerReceiver( context, broadcastReceiver, IntentFilter(ACTION_BROADCAST_CONTROL), ContextCompat.RECEIVER_NOT_EXPORTED ) onDispose { context.unregisterReceiver(broadcastReceiver) } } }
PictureInPictureParams.Builderमें रिमोट ऐक्शन की सूची पास करें:val context = LocalContext.current val pipModifier = modifier.onGloballyPositioned { layoutCoordinates -> val builder = PictureInPictureParams.Builder() builder.setActions( listOfRemoteActions() ) if (shouldEnterPipMode && player != null && player.videoSize != VideoSize.UNKNOWN) { val sourceRect = layoutCoordinates.boundsInWindow().toAndroidRectF().toRect() builder.setSourceRectHint(sourceRect) builder.setAspectRatio( Rational(player.videoSize.width, player.videoSize.height) ) } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { builder.setAutoEnterEnabled(shouldEnterPipMode) } context.findActivity().setPictureInPictureParams(builder.build()) } VideoPlayer(modifier = pipModifier)
अगले चरण
- Compose में पीआईपी मोड इस्तेमाल करने के सबसे सही तरीके देखने के लिए, Socialite ऐप्लिकेशन देखें.
- ज़्यादा जानकारी के लिए, पीआईपी डिज़ाइन से जुड़े दिशा-निर्देश देखें.