Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Media Player controls in Notification

Tags:

I have written complete Music Player to stream music from the web, but I don't know how to put media player controls in Notification and when the screen is Lock.

I am following this tutorial to show controls in the Notification bar, but still not getting How to use same functionality in my program, I have imported required classes like: NotificationService.java and Constants.java.

This is what I am getting in Notification Bar:

[Notification]

I am confused. Why I am not getting title of the song I am playing, why pause, prev and next buttons are not working etc ...

NotificationService.java:

public class NotificationService extends Service {      Notification status;     private final String LOG_TAG = "NotificationService";      @Override     public void onDestroy() {         super.onDestroy();     }      @Override     public IBinder onBind(Intent intent) {         return null;     }       @Override     public int onStartCommand(Intent intent, int flags, int startId) {          if (intent.getAction().equals(Constants.ACTION.STARTFOREGROUND_ACTION)) {             showNotification();             Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show();           } else if (intent.getAction().equals(Constants.ACTION.PREV_ACTION)) {             Toast.makeText(this, "Clicked Previous", Toast.LENGTH_SHORT).show();             Log.i(LOG_TAG, "Clicked Previous");         } else if (intent.getAction().equals(Constants.ACTION.PLAY_ACTION)) {             Toast.makeText(this, "Clicked Play", Toast.LENGTH_SHORT).show();             Log.i(LOG_TAG, "Clicked Play");         } else if (intent.getAction().equals(Constants.ACTION.NEXT_ACTION)) {             Toast.makeText(this, "Clicked Next", Toast.LENGTH_SHORT).show();             Log.i(LOG_TAG, "Clicked Next");         } else if (intent.getAction().equals(Constants.ACTION.STOPFOREGROUND_ACTION)) {             Log.i(LOG_TAG, "Received Stop Foreground Intent");             Toast.makeText(this, "Service Stoped", Toast.LENGTH_SHORT).show();             stopForeground(true);             stopSelf();         }         return START_STICKY;     }      private void showNotification() {         // Using RemoteViews to bind custom layouts into Notification         RemoteViews views = new RemoteViews(getPackageName(), R.layout.status_bar);         RemoteViews bigViews = new RemoteViews(getPackageName(), R.layout.status_bar_expanded);          // showing default album image         views.setViewVisibility(R.id.status_bar_icon, View.VISIBLE);         views.setViewVisibility(R.id.status_bar_album_art, View.GONE);         bigViews.setImageViewBitmap(R.id.status_bar_album_art,         Constants.getDefaultAlbumArt(this));         Intent notificationIntent = new Intent(this, MusicPlayerActivity.class);         notificationIntent.setAction(Constants.ACTION.MAIN_ACTION);         notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK         | Intent.FLAG_ACTIVITY_CLEAR_TASK);         PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);         Intent previousIntent = new Intent(this, NotificationService.class);         previousIntent.setAction(Constants.ACTION.PREV_ACTION);         PendingIntent ppreviousIntent = PendingIntent.getService(this, 0, previousIntent, 0);         Intent playIntent = new Intent(this, NotificationService.class);         playIntent.setAction(Constants.ACTION.PLAY_ACTION);         PendingIntent pplayIntent = PendingIntent.getService(this, 0, playIntent, 0);          Intent nextIntent = new Intent(this, NotificationService.class);         nextIntent.setAction(Constants.ACTION.NEXT_ACTION);         PendingIntent pnextIntent = PendingIntent.getService(this, 0, nextIntent, 0);          Intent closeIntent = new Intent(this, NotificationService.class);         closeIntent.setAction(Constants.ACTION.STOPFOREGROUND_ACTION);         PendingIntent pcloseIntent = PendingIntent.getService(this, 0, closeIntent, 0);         views.setOnClickPendingIntent(R.id.status_bar_play, pplayIntent);         bigViews.setOnClickPendingIntent(R.id.status_bar_play, pplayIntent);         views.setOnClickPendingIntent(R.id.status_bar_next, pnextIntent);         bigViews.setOnClickPendingIntent(R.id.status_bar_next, pnextIntent);         views.setOnClickPendingIntent(R.id.status_bar_prev, ppreviousIntent);         bigViews.setOnClickPendingIntent(R.id.status_bar_prev, ppreviousIntent);         views.setOnClickPendingIntent(R.id.status_bar_collapse, pcloseIntent);         bigViews.setOnClickPendingIntent(R.id.status_bar_collapse, pcloseIntent);         views.setImageViewResource(R.id.status_bar_play,         R.drawable.apollo_holo_dark_pause);         bigViews.setImageViewResource(R.id.status_bar_play,         R.drawable.apollo_holo_dark_pause);         views.setTextViewText(R.id.status_bar_track_name, "Song Title");         bigViews.setTextViewText(R.id.status_bar_track_name, "Song Title");         views.setTextViewText(R.id.status_bar_artist_name, "Artist Name");         bigViews.setTextViewText(R.id.status_bar_artist_name, "Artist Name");         bigViews.setTextViewText(R.id.status_bar_album_name, "Album Name");         status = new Notification.Builder(this).build();         status.contentView = views;         status.bigContentView = bigViews;         status.flags = Notification.FLAG_ONGOING_EVENT;         status.icon = R.drawable.ic_launcher;         status.contentIntent = pendingIntent;         startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, status);         }     } 

Constants.java:

public class Constants {     public interface ACTION {         public static String MAIN_ACTION = "com.marothiatechs.customnotification.action.main";         public static String INIT_ACTION = "com.marothiatechs.customnotification.action.init";         public static String PREV_ACTION = "com.marothiatechs.customnotification.action.prev";         public static String PLAY_ACTION = "com.marothiatechs.customnotification.action.play";         public static String NEXT_ACTION = "com.marothiatechs.customnotification.action.next";         public static String STARTFOREGROUND_ACTION = "com.marothiatechs.customnotification.action.startforeground";         public static String STOPFOREGROUND_ACTION = "com.marothiatechs.customnotification.action.stopforeground";      }      public interface NOTIFICATION_ID {         public static int FOREGROUND_SERVICE = 101;     }      public static Bitmap getDefaultAlbumArt(Context context) {         Bitmap bm = null;         BitmapFactory.Options options = new BitmapFactory.Options();         try {             bm = BitmapFactory.decodeResource(context.getResources(),             R.drawable.default_album_art, options);         } catch (Error ee) {         } catch (Exception e) {         }     return bm;     } } 

MusicPlayerActivity.java:

public class MusicPlayerActivity extends Activity {  // ....      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_music_player);         mediaPlayer = new MediaPlayer();         audiosArrayList = new ArrayList<MusicPlayer>();         listview = (ListView) findViewById(R.id.list_slidermenu);      // ...          btnPlay.setOnClickListener(new OnClickListener() {              @Override             public void onClick(View view) {                 try {                     play();                                     } catch (Exception exception){                     Log.v("exception:play", exception.toString());                 }              }         });          btnPause.setOnClickListener(new OnClickListener() {              @Override             public void onClick(View view) {                 try {                     pause();                 } catch (Exception exception){                     Log.v("exception:pause", exception.toString());                 }              }         });          btnNext.setOnClickListener(new OnClickListener() {              @Override             public void onClick(View view) {                 try {                     next();                 } catch (Exception exception){                     Log.v("exception:next", exception.toString());                 }              }         });          btnPrev.setOnClickListener(new OnClickListener() {              @Override             public void onClick(View view) {                  try {                     prev();                 } catch (Exception exception){                     Log.v("exception:pause", exception.toString());                 }             }         });         new JSONAsyncTask().execute("http://myurl/json/musics.json");         listview.setOnItemClickListener(new OnItemClickListener() {         @Override         public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {              if (mediaPlayer != null && mediaPlayer.isPlaying())                 try {                     mediaPlayer.stop();                 } catch (Exception e) {                  }             play();         }     });      ......      }      // ...      public void startService(View v) {         Intent serviceIntent = new Intent(MusicPlayerActivity.this, NotificationService.class);         serviceIntent.setAction(Constants.ACTION.STARTFOREGROUND_ACTION);         startService(serviceIntent);     } 
like image 426
Sophie Avatar asked Dec 28 '15 04:12

Sophie


People also ask

What is media player controls?

controls. A Media Player is a Video Control that is used to play a video in the microapp. The Media player comes with all the controls that are present in any generic media player like play/pause, volume, and fullscreen view.

What is media control in android?

Media controls in Android 11 are located near the Quick Settings. Sessions from multiple apps are arranged in a swipeable carousel. The carousel lists sessions in this order: Streams playing locally on the phone. Remote streams, such as those detected on external devices or cast sessions.

What is media player in quick settings?

The media player feature can be found right below your quick settings tiles when you pull down the notification shade. In there, Android 12 registers the media content you've been playing recently, giving you quick access to it. You can play/pause your songs/video from here, or you can skip between media files quickly.

How do I turn off android media player?

What to Know. Go to Settings > Sound & vibration > Media. Tap an app from the list to turn its media player on or off.


1 Answers

try something like this (i used integers for actions):

intent.putExtra("action", ACTION_EXIT); pendingIntent = PendingIntent.getService(this, intent.getIntExtra("action", 0), intent, PendingIntent.FLAG_UPDATE_CURRENT); 

in public static PendingIntent getService (Context context, int requestCode, Intent intent, int flags) the requestCode must be unique.

like image 75
Drake29a Avatar answered Oct 05 '22 04:10

Drake29a