درحال ساختن فعالیت پخش‌کننده ویدیو

وقتی فعالیت روش فراخوانی چرخه حیات onCreate() را دریافت می‌کند، باید این مراحل را انجام دهد:

  • ایجاد و راه‌اندازی جلسه رسانه
  • تنظیم کردن فراخوانی جلسه رسانه
  • گیرنده دکمه رسانه جلسه رسانه را روی null تنظیم کنید تا رویداد دکمه رسانه وقتی پخش‌کننده نمایان نیست آن را بازراه‌اندازی نکند. این موضوع فقط بر دستگاه‌های دارای Android 5.0 (سطح میانای برنامه‌سازی کاربردی ۲۱) و بالاتر تأثیر می‌گذارد.
  • ایجاد و مقداردهی اولیه کنترل‌کننده رسانه

کد onCreate() زیر این مراحل را نشان می‌دهد:

کاتلین

private lateinit var mediaSession: MediaSessionCompat

public override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // Create a MediaSessionCompat
    mediaSession = MediaSessionCompat(this, LOG_TAG).apply {

        // Enable callbacks from MediaButtons and TransportControls
        setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or
                MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)

        // Do not let MediaButtons restart the player when the app is not visible
        setMediaButtonReceiver(null)

        // Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player
        val stateBuilder = PlaybackStateCompat.Builder()
                .setActions(PlaybackStateCompat.ACTION_PLAY or PlaybackStateCompat.ACTION_PLAY_PAUSE)
        setPlaybackState(stateBuilder.build())

        // MySessionCallback has methods that handle callbacks from a media controller
        setCallback(MySessionCallback())
    }

    // Create a MediaControllerCompat
    MediaControllerCompat(this, mediaSession).also { mediaController ->
        MediaControllerCompat.setMediaController(this, mediaController)
    }
}

جاوا

MediaSessionCompat mediaSession;
PlaybackStateCompat.Builder stateBuilder;

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  // Create a MediaSessionCompat
  mediaSession = new MediaSessionCompat(this, LOG_TAG);

  // Enable callbacks from MediaButtons and TransportControls
  mediaSession.setFlags(
    MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
    MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);

  // Do not let MediaButtons restart the player when the app is not visible
  mediaSession.setMediaButtonReceiver(null);

  // Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player
  stateBuilder = new PlaybackStateCompat.Builder()
                .setActions(
                    PlaybackStateCompat.ACTION_PLAY |
                    PlaybackStateCompat.ACTION_PLAY_PAUSE);
  mediaSession.setState(stateBuilder.build());

  // MySessionCallback has methods that handle callbacks from a media controller
  mediaSession.setCallback(new MySessionCallback());

  // Create a MediaControllerCompat
  MediaControllerCompat mediaController =
    new MediaControllerCompat(this, mediaSession);

  MediaControllerCompat.setMediaController(this, mediaController);
}

وقتی برنامه‌ای بسته می‌شود، فعالیت به‌طور متوالی تماس‌های برگشتی onPause() و onStop() را دریافت می‌کند. اگر پخش‌کننده درحال پخش است، باید آن را متوقف کنید تا فعالیت آن ازبین برود. انتخاب اینکه از کدام فراخوانی برگشتی استفاده شود به نسخه Android مورداستفاده شما بستگی دارد.

در Android نسخه ۶.۰ (سطح میانای برنامه‌سازی کاربردی ۲۳) و نسخه‌های قدیمی‌تر، هیچ تضمینی برای زمان فراخوانی onStop() وجود ندارد؛ ممکن است ۵ ثانیه پس‌از ناپدید شدن فعالیت شما فراخوانی شود. بنابراین، در نسخه‌های Android قدیمی‌تر از ۷.۰، برنامه‌تان باید بازپخش را در onPause() متوقف کند. در Android نسخه ۷.۰ و بالاتر، سیستم به‌محض اینکه فعالیت نامرئی می‌شود onStop() را فراخوانی می‌کند، بنابراین این موضوع مشکلی ایجاد نمی‌کند.

به‌طور خلاصه:

  • در Android نسخه ۶.۰ و قدیمی‌تر، پخش‌کننده را در فراخوانی برگشتی onPause() متوقف کنید.
  • در Android نسخه ۷.۰ و بالاتر، پخش‌کننده را در بازخوانی onStop() متوقف کنید.

وقتی فعالیت onDestroy() را دریافت می‌کند، باید پخش‌کننده شما را آزاد و پاک‌سازی کند.