Skip to main content

Audio Player

Quickplay Player supports audio playback, providing a seamless listening experience. It include background playback, playlist, offline playback, and Android Auto support.

Android Setup Prerequisites​

Complete the following steps to enable audio playback on Android devices.

1) Configure AndroidManifest​

Add the required permissions at the manifest root level and define the service within the <application> tag in app/src/main/AndroidManifest.xml.

<manifest>
<!-- Permissions (root level) -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />

<application>
<!-- Service (inside application) -->
<service
android:name=".<NameOfYourService>"
android:enabled="true"
android:exported="true"
android:foregroundServiceType="mediaPlayback">
<intent-filter>
<action android:name="androidx.media3.session.MediaLibraryService"/>
<action android:name="android.media.browse.MediaBrowserService"/>
</intent-filter>
</service>
</application>
</manifest>
  • Replace NameOfYourService with your custom service class name if you're extending AudioContentLibraryService. Otherwise, use the default AudioContentLibraryService provided by the SDK.

2) Initialize Audio Service on App Launch​

Start the audio service as early as possible in your application lifecycle, ideally in your JavaScript entry point or root component.

// App bootstrap (e.g., App.tsx)
import { useEffect } from 'react';
import { audioService } from '@quickplay/rn-qp-nxg-player';

export default function App() {
useEffect(() => {
audioService.startAudioService();
}, []);
// ...existing app code...
}

3) Implement Process Cleanup​

Terminate the process in onTaskRemoved() to ensure proper app shutdown when the user removes it from the Recent Apps list.

class NameOfYourService : AudioContentLibraryService() {
override fun onTaskRemoved(rootIntent: Intent?) {
android.os.Process.killProcess(android.os.Process.myPid())
}
}

Important Notes:

  • Avoid setting FLAG_STOP_WITH_TASK in the manifest, as it prevents onTaskRemoved() from being invoked.
  • This behavior affects multiple Android versions and is a known platform-level limitation.

Player Initialization​

import { createPlayer, PlayerConfig } from '@quickplay/rn-qp-nxg-player';

const playerListener = {
onStateChanged: (playbackState, bufferingState, seekingState) => {
console.log('Player state:', playbackState);
},
...
// Add other listeners
}
const mediaMetadata: Record<AndroidMediaMetadataKeys, string> | Record<iOSMediaMetaDataKeys, string> = {
TITLE: "Sample Title",
ARTIST: "Sample Artist",
DISPLAY_SUBTITLE: "Sample Subtitle",
ALBUM: "Sample Album",
DURATION: "300000", // Duration is required and must be specified in milliseconds (ms)
ARTWORK_URL: "https://example.com/artwork.jpg"
};

let playerConfig: PlayerConfig = {
// ...existing config...
mediaURL: 'https://example.com/audio.mp3', // Initial audio track URL.
mediaType: 'OTHER', //Use OTHER for MP3.
mediaMetadata: mediaMetadata, // Update lock screen display with current media information
useCustomPlayerControls: false, // Use native controls.
isAudioContent: true,
// ...existing config...
};

let player = await createPlayer(playerConfig);

Important Notes:

  • For MP3 content, set mediaType to 'OTHERS' and enable isAudioContent = true for Android only.

Configure Lock Screen Metadata for iOS​

await player.setPlayerPreference({
assignRemoteActions: true, // Enable lock screen controls and remote command handling
remoteStopAction: RemoteStopAction.PAUSE, // Pause playback when stop button is pressed
});

// Define metadata to display on the lock screen
const playingInfo: PlayingInfo = {
assetUrl: 'mediaURL',
mediaType: 'mediaType',
title: 'Title',
artist: 'Artist',
};
let image = 'some-image'
// Update lock screen display with current media information
await player.setNowPlayingInfo(playingInfo);
// To display the artwork image in lock screen controls, use:
await player.setNowPlayingArtworkImage(image)

Configure Lock Screen Metadata for Android​

// To refresh the lock screen media metadata with the latest media details for the newly added list
player.updateMediaMetadata(mediaMetadata);

Attach Player Listener​

player.addListener(playerListener);