जब ऐक्टिविटी को onCreate()
लाइफ़साइकल कॉलबैक मैथड मिलता है, तो उसे ये चरण पूरे करने चाहिए:
- मीडिया सेशन बनाना और उसे शुरू करना
- मीडिया सेशन कॉलबैक सेट करना
- मीडिया सेशन के मीडिया बटन रिसीवर को शून्य पर सेट करें, ताकि मीडिया बटन इवेंट प्लेयर को तब रीस्टार्ट न करे, जब वह न दिख रहा हो. इसका असर सिर्फ़ Android 5.0 (एपीआई लेवल 21) और उसके बाद वाले डिवाइसों पर पड़ता है.
- मीडिया कंट्रोलर बनाना और उसे शुरू करना
नीचे दिया गया 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 6.0 (एपीआई लेवल 23) और इससे पहले के वर्शन में, इस बात की कोई गारंटी नहीं है कि onStop()
को कब कॉल किया जाएगा. आपकी गतिविधि के गायब होने के पांच सेकंड बाद तक इसे कॉल किया जा सकता है. इसलिए, Android 7.0 से पहले के वर्शन में, आपका ऐप्लिकेशन onPause()
में वीडियो चलाना बंद कर देगा. Android 7.0 और उसके बाद के वर्शन में, गतिविधि न दिखने पर सिस्टम तुरंत onStop()
को कॉल करता है. इसलिए, यह कोई समस्या नहीं है.
खास जानकारी:
- Android 6.0 और उससे पहले के वर्शन में,
onPause()
कॉलबैक में प्लेयर को बंद करें. - Android 7.0 और उसके बाद के वर्शन में,
onStop()
कॉलबैक में प्लेयर को रोकें.
जब गतिविधि को onDestroy()
कॉलबैक मिलता है, तो उसे आपके प्लेयर को रिलीज़ करना चाहिए और उसे साफ़ करना चाहिए.