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:
[]
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); }
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.
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.
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.
What to Know. Go to Settings > Sound & vibration > Media. Tap an app from the list to turn its media player on or off.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With