title: Display media player notification
body: <p>I have successfully been able to stream MP3 from server in my and now i want to display a media player notification with controls when the song starts to play. I have followed some tutorials on how to do that but I am still getting errors when trying to do same in my app.</p>
  
  <p>this is how i try to show notification when music starts to play</p>
  
  <pre><code>  playBtn.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
  
              if (!mediaPlayer.isPlaying()) {
                  mediaPlayer.start();
                  playBtn.setImageResource(R.drawable.music_play_24dp);
  
                  startService(view);
  
              }
              else {
                  mediaPlayer.pause();
                  playBtn.setImageResource(R.drawable.music_stop_24dp);
  
              }
          }
      });
  }
  
  public void startService(View v) {
      Intent serviceIntent = new Intent(DetailActivity.this, NotificationService.class);
      serviceIntent.setAction(Constants.ACTION.STARTFOREGROUND_ACTION);
      startService(serviceIntent);
  }
  </code></pre>
  
  <p>and this is my full <code>NotificationService.class</code></p>
  
  <pre><code>public class NotificationService extends Service {
  
  @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;
  }
  
  Notification status;
  private final String LOG_TAG = "NotificationService";
  
  private void showNotification() {
  
      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, MainActivity.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.mipmap.ic_launcher_custom;
      status.contentIntent = pendingIntent;
      startForeground(Constants.NOTIFICATION_ID.FOREGROUND_SERVICE, status);
  }
  }
  </code></pre>
  
  <p>But when i run the code and click on the play button the app crashes and logcat returns this error without pointing to a specific line of code.</p>
  
  <pre><code>android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=null pri=0 contentView=com.mani.eric.faithhyme/0x7f0b004c vibrate=null sound=null defaults=0x0 flags=0x42 color=0x00000000 vis=PRIVATE semFlags=0x0 semPriority=0 semMissedCount=0)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1872)
      at android.os.Handler.dispatchMessage(Handler.java:106)
      at android.os.Looper.loop(Looper.java:214)
  </code></pre>