اگر میخواهید کنترلهایی (پخش، مکث و غیره) را به پنجره PiP خود اضافه کنید، برای هر کنترلی که میخواهید اضافه کنید، یک 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
برای کنترلهای موجود در پنجره PiP خود ایجاد کنید. - در مرحله بعد، یک
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 PiP در عمل، به برنامه Socialite مراجعه کنید.
- برای اطلاعات بیشتر به راهنمای طراحی PiP مراجعه کنید.
اگر میخواهید کنترلهایی (پخش، مکث و غیره) را به پنجره PiP خود اضافه کنید، برای هر کنترلی که میخواهید اضافه کنید، یک 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
برای کنترلهای موجود در پنجره PiP خود ایجاد کنید. - در مرحله بعد، یک
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 PiP در عمل، به برنامه Socialite مراجعه کنید.
- برای اطلاعات بیشتر به راهنمای طراحی PiP مراجعه کنید.
اگر میخواهید کنترلهایی (پخش، مکث و غیره) را به پنجره PiP خود اضافه کنید، برای هر کنترلی که میخواهید اضافه کنید، یک 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
برای کنترلهای موجود در پنجره PiP خود ایجاد کنید. - در مرحله بعد، یک
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 PiP در عمل، به برنامه Socialite مراجعه کنید.
- برای اطلاعات بیشتر به راهنمای طراحی PiP مراجعه کنید.
اگر میخواهید کنترلهایی (پخش، مکث و غیره) را به پنجره PiP خود اضافه کنید، برای هر کنترلی که میخواهید اضافه کنید، یک 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
برای کنترلهای موجود در پنجره PiP خود ایجاد کنید. - در مرحله بعد، یک
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 PiP در عمل، به برنامه Socialite مراجعه کنید.
- برای اطلاعات بیشتر به راهنمای طراحی PiP مراجعه کنید.