The media-controller-client sample application demonstrates how you can create a custom media controller client type application. This sample application is based on a simple lockscreen application.
The following figure illustrates the main view of the media-controller-client sample application.
Figure: Media-controller-client main view
Prerequisites
To ensure proper application execution, the following privilege must be set:
- http://tizen.org/privilege/mediacontroller.client
Implementation
To use the media controller client:
- Create the media controller client handle in the __create_player_client() function. The function sets the callbacks to receive the update event from the media controller server.
static void __create_player_client(void) { int ret = mc_client_create(&s_player_data.player_client); if (ret != MEDIA_CONTROLLER_ERROR_NONE) { dlog_print(DLOG_ERROR, LOG_TAG, "Media controller client creation [%d]", ret); return; } // Callbacks on server events mc_client_set_server_update_cb(s_player_data.player_client, __player_state_changed_cb, NULL); mc_client_set_playback_update_cb(s_player_data.player_client, __playback_updated_cb, NULL); mc_client_set_metadata_update_cb(s_player_data.player_client, __metadata_updated_cb, NULL); mc_client_set_shuffle_mode_update_cb(s_player_data.player_client, __shuffle_mode_updated_cb, NULL); mc_client_set_repeat_mode_update_cb(s_player_data.player_client, __repeat_mode_updated_cb, NULL); return; }
- Initialize the media information with the latest server information in the __create_player_client() function. The function can also get the latest media information using the mc_client_get_latest_server_info() and mc_client_get_server_xxx() functions. The server name is necessary to use the mc_client_get_server_xxx() functions. To get the server name, use the mc_client_foreach_server() or mc_client_get_latest_server_info() function.
static void __create_player_client(void) { int ret = mc_client_create(&s_player_data.player_client); ret = mc_client_foreach_server(s_player_data.player_client, __server_list_cb, NULL); ret = mc_client_get_latest_server_info(s_player_data.player_client, &server_name, &server_state); if (ret == MEDIA_CONTROLLER_ERROR_NONE && server_name && !s_player_data.connected) { s_player_data.app_name = strdup(server_name); mc_client_get_server_playback_info(s_player_data.player_client, s_player_data.app_name, &s_player_data.playback_info); mc_client_get_server_metadata(s_player_data.player_client, s_player_data.app_name, &s_player_data.metadata); mc_client_get_server_shuffle_mode(s_player_data.player_client, s_player_data.app_name, &shuffle_mode); mc_client_get_server_repeat_mode(s_player_data.player_client, s_player_data.app_name, &repeat_mode); } else { dlog_print(DLOG_DEBUG, LOG_TAG, "Didn't get information about latest server"); } return; }
- Send the playback state command to the media controller server application with the mc_client_send_playback_state_command() function. This function can change the playback state of the media controller server.
static void __play_clicked_cb(void *data, Evas_Object *obj, void *event_info) { mc_client_send_playback_state_command(s_player_data.player_client, s_player_data.app_name, MC_PLAYBACK_STATE_PLAYING); dlog_print(DLOG_DEBUG, LOG_TAG, "Send Play command to player app [%s]", s_player_data.app_name); } static void __prev_clicked_cb(void *data, Evas_Object *obj, void *event_info) { mc_client_send_playback_state_command(s_player_data.player_client, s_player_data.app_name, MC_PLAYBACK_STATE_PREV_FILE); dlog_print(DLOG_DEBUG, LOG_TAG, "Send Previous track command to player app [%s]", s_player_data.app_name); } static void __next_clicked_cb(void *data, Evas_Object *obj, void *event_info) { mc_client_send_playback_state_command(s_player_data.player_client, s_player_data.app_name, MC_PLAYBACK_STATE_NEXT_FILE); dlog_print(DLOG_DEBUG, LOG_TAG, "Send Next track command to player app [%s]", s_player_data.app_name); }
- Unset the callbacks with the mc_client_unset_xxx_update_cb() functions. The media controller client handle must be destroyed using the mc_client_destroy() function.
static void __destroy_player_client(void) { mc_client_unset_server_update_cb(s_player_data.player_client); mc_client_unset_playback_update_cb(s_player_data.player_client); mc_client_unset_metadata_update_cb(s_player_data.player_client); mc_client_unset_shuffle_mode_update_cb(s_player_data.player_client); mc_client_unset_repeat_mode_update_cb(s_player_data.player_client); mc_client_destroy(s_player_data.player_client); mc_client_destroy_playback(s_player_data.playback_info); mc_client_destroy_metadata(s_player_data.metadata); if (s_player_data.app_name) { free(s_player_data.app_name); } return; }